Sample code for 30+ languages & platforms
Tcl

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set xml [new_CkXml]

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

set success [CkXml_LoadXml $xml "<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>"]

set i 0
# xmlSearch is a CkXml
set xmlSearch [CkXml_GetRoot $xml]
# afterPtr is a CkXml
set afterPtr [CkXml_GetRoot $xml]
# pTemp is a CkXml

# Alway begin the search from the root.
while {D]CkXml_SearchForTag2 $xmlSearch $afterPtr "testchild1"[/L} {
    # If successful, xmlSearch now points to the found element.
    set i [expr $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.
    puts "$i: [CkXml_content $xmlSearch]"
    set pTemp $afterPtr
    set afterPtr $xmlSearch
    CkXml_GetRoot2 $pTemp
    set xmlSearch $pTemp
}

delete_CkXml $xmlSearch

delete_CkXml $afterPtr

puts "----"

# A better way:
set sbState [new_CkStringBuilder]

set i 0
while {[CkXml_NextInTraversal2 $xml $sbState] != 0} {
    if {[CkXml_TagEquals $xml "testchild1"] == 1} then {
        puts "$i: [CkXml_content $xml]"
        set i [expr $i + 1]
    }

}
CkXml_GetRoot2 $xml

delete_CkXml $xml
delete_CkStringBuilder $sbState