Sample code for 30+ languages & platforms
Visual FoxPro

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loXml
LOCAL i
LOCAL loXmlSearch
LOCAL loAfterPtr
LOCAL loPTemp
LOCAL loSbState

lnSuccess = 0

loXml = CreateObject('Chilkat.Xml')

* Load the following XML:

* 	<Test>
* 	    <testchild1>
* 	        test
* 	    </testchild1>
* 	    <testchild1>
* 	        test1
* 	    </testchild1>
* 	    <testchild1>
* 	        test2
* 	    </testchild1>
* 	    <testchild1>
* 	        test3
* 	    </testchild1>
* 	    <testchild1>
* 	        test4
* 	    </testchild1>
* 	    <testchild1>
* 	        test5
* 	    </testchild1>
* 	    <testchild1>
* 	        test6
* 	    </testchild1>
* 	</Test>

lnSuccess = loXml.LoadXml("<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>")

i = 0
loXmlSearch = loXml.GetRoot()
loAfterPtr = loXml.GetRoot()

* Alway begin the search from the root.
DO WHILE loXmlSearch.SearchForTag2(loAfterPtr,"testchild1")
    * If successful, xmlSearch now points to the found element.
    i = i + 1

    * Set afterPtr = xmlSearch (so we find the next match after the one we just found)
    * Rest xmlSearch to the root of the XML tree to be searched.
    ? STR(i) + ": " + loXmlSearch.Content
    loPTemp = loAfterPtr
    loAfterPtr = loXmlSearch
    loPTemp.GetRoot2()
    loXmlSearch = loPTemp
ENDDO

RELEASE loXmlSearch
RELEASE loAfterPtr

? "----"

* A better way:
loSbState = CreateObject('Chilkat.StringBuilder')
i = 0
DO WHILE loXml.NextInTraversal2(loSbState) <> 0
    IF (loXml.TagEquals("testchild1") = 1) THEN
        ? STR(i) + ": " + loXml.Content
        i = i + 1
    ENDIF

ENDDO
loXml.GetRoot2()

RELEASE loXml
RELEASE loSbState