PureBasic
PureBasic
Iterate over Direct Child Nodes by Index
See more XML Examples
Demonstrates some ways to iterate over direct child nodes by index.The input XML, available at http://www.chilkatsoft.com/data/get_child.xml, is this:
<root>
<fruit color="red">apple</fruit>
<fruit color="green">pear</fruit>
<veg color="orange">carrot</veg>
<meat animal="cow">beef</meat>
<xyz>
<fruit color="blue">blueberry</fruit>
<veg color="green">broccoli</veg>
</xyz>
<fruit color="purple">grape</fruit>
<cheese color="yellow">cheddar</cheese>
</root>
Chilkat PureBasic Downloads
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
success.i = 0
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
child.i
; The sample input XML is available at http://www.chilkatsoft.com/data/get_child.xml
success = CkXml::ckLoadXmlFile(xml,"get_child.xml")
If success <> 1
Debug CkXml::ckLastErrorText(xml)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
; The NumChildren property contains the number of direct
; child nodes. Note: The child nodes under "xyz" are NOT
; direct children of "root". Therefore, the "root" node has
; 7 direct children
Debug "NumChildren = " + Str(CkXml::ckNumChildren(xml))
; Iterate over the direct children by index. The first child
; is at index 0.
i.i
For i = 0 To CkXml::ckNumChildren(xml) - 1
; access the tag and content directly by index:
Debug Str(i) + ": " + CkXml::ckGetChildTagByIndex(xml,i) + " : " + CkXml::ckGetChildContentByIndex(xml,i)
Next
Debug "-----"
; Do the same as the above loop, but get the child node
; and access the Tag and Content properties:
For i = 0 To CkXml::ckNumChildren(xml) - 1
child = CkXml::ckGetChild(xml,i)
Debug Str(i) + ": " + CkXml::ckTag(child) + " : " + CkXml::ckContent(child)
CkXml::ckDispose(child)
Next
Debug "-----"
; Do the same as the above loop, but instead of creating
; a new object instance for each child, call GetChild2 to
; update the object's reference instead.
For i = 0 To CkXml::ckNumChildren(xml) - 1
; Navigate to the Nth child.
success = CkXml::ckGetChild2(xml,i)
Debug Str(i) + ": " + CkXml::ckTag(xml) + " : " + CkXml::ckContent(xml)
; Navigate back up to the parent:
success = CkXml::ckGetParent2(xml)
Next
Debug "-----"
; Notice that the Content of the "xyz" node is empty. This is correct.
; The "xyz" node has no Content, but 2 direct children
CkXml::ckDispose(xml)
ProcedureReturn
EndProcedure