Sample code for 30+ languages & platforms
PureBasic

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

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

    success = CkXml::ckLoadXml(xml,"<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>")

    i.i = 0
    xmlSearch.i = CkXml::ckGetRoot(xml)
    afterPtr.i = CkXml::ckGetRoot(xml)
    pTemp.i

    ; Alway begin the search from the root.
    While CkXml::ckSearchForTag2(xmlSearch,afterPtr,"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.
        Debug Str(i) + ": " + CkXml::ckContent(xmlSearch)
        pTemp = afterPtr
        afterPtr = xmlSearch
        CkXml::ckGetRoot2(pTemp)
        xmlSearch = pTemp
    Wend

    CkXml::ckDispose(xmlSearch)

    CkXml::ckDispose(afterPtr)

    Debug "----"

    ; A better way:
    sbState.i = CkStringBuilder::ckCreate()
    If sbState.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    i = 0
    While CkXml::ckNextInTraversal2(xml,sbState) <> 0
        If CkXml::ckTagEquals(xml,"testchild1") = 1
            Debug Str(i) + ": " + CkXml::ckContent(xml)
            i = i + 1
        EndIf

    Wend
    CkXml::ckGetRoot2(xml)


    CkXml::ckDispose(xml)
    CkStringBuilder::ckDispose(sbState)


    ProcedureReturn
EndProcedure