Sample code for 30+ languages & platforms
PowerBuilder

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Xml
integer i
oleobject loo_XmlSearch
oleobject loo_AfterPtr
oleobject loo_PTemp
oleobject loo_SbState

li_Success = 0

loo_Xml = create oleobject
li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml")
if li_rc < 0 then
    destroy loo_Xml
    MessageBox("Error","Connecting to COM object failed")
    return
end if

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

li_Success = loo_Xml.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
loo_XmlSearch = loo_Xml.GetRoot()
loo_AfterPtr = loo_Xml.GetRoot()

// Alway begin the search from the root.
do while loo_XmlSearch.SearchForTag2(loo_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.
    Write-Debug string(i) + ": " + loo_XmlSearch.Content
    loo_PTemp = loo_AfterPtr
    loo_AfterPtr = loo_XmlSearch
    loo_PTemp.GetRoot2()
    loo_XmlSearch = loo_PTemp
loop

destroy loo_XmlSearch
destroy loo_AfterPtr

Write-Debug "----"

// A better way:
loo_SbState = create oleobject
li_rc = loo_SbState.ConnectToNewObject("Chilkat.StringBuilder")

i = 0
do while loo_Xml.NextInTraversal2(loo_SbState) <> 0
    if loo_Xml.TagEquals("testchild1") = 1 then
        Write-Debug string(i) + ": " + loo_Xml.Content
        i = i + 1
    end if

loop
loo_Xml.GetRoot2()


destroy loo_Xml
destroy loo_SbState