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