Sample code for 30+ languages & platforms
DataFlex

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoXml
    Integer i
    Variant vXmlSearch
    Handle hoXmlSearch
    Variant vAfterPtr
    Handle hoAfterPtr
    Variant vPTemp
    Handle hoPTemp
    Variant vSbState
    Handle hoSbState
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End

    // 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>

    Get ComLoadXml Of hoXml "<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>" To iSuccess

    Move 0 To i
    Get ComGetRoot Of hoXml To vXmlSearch
    If (IsComObject(vXmlSearch)) Begin
        Get Create (RefClass(cComChilkatXml)) To hoXmlSearch
        Set pvComObject Of hoXmlSearch To vXmlSearch
    End
    Get ComGetRoot Of hoXml To vAfterPtr
    If (IsComObject(vAfterPtr)) Begin
        Get Create (RefClass(cComChilkatXml)) To hoAfterPtr
        Set pvComObject Of hoAfterPtr To vAfterPtr
    End

    // Alway begin the search from the root.
    While (ComSearchForTag2(hoXmlSearch, vAfterPtr, "testchild1"))
        // If successful, xmlSearch now points to the found element.
        Move (i + 1) To i

        // 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.
        Get ComContent Of hoXmlSearch To sTemp1
        Showln i ": " sTemp1
        Move hoAfterPtr To hoPTemp
        Move hoXmlSearch To hoAfterPtr
        Send ComGetRoot2 To hoPTemp
        Move hoPTemp To hoXmlSearch
    Loop

    Send Destroy of hoXmlSearch
    Send Destroy of hoAfterPtr

    Showln "----"

    // A better way:
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbState
    If (Not(IsComObjectCreated(hoSbState))) Begin
        Send CreateComObject of hoSbState
    End
    Move 0 To i
    Get pvComObject of hoSbState to vSbState
    While ((ComNextInTraversal2(hoXml, vSbState)) <> False)
        Get ComTagEquals Of hoXml "testchild1" To bTemp1
        If (bTemp1 = True) Begin
            Get ComContent Of hoXml To sTemp1
            Showln i ": " sTemp1
            Move (i + 1) To i
        End

    Loop

    Send ComGetRoot2 To hoXml


End_Procedure