PureBasic
PureBasic
Traverse Direct Children via FirstChild / NextSibling, or LastChild / PreviousSibling
See more XML Examples
Demonstrates some ways to iterate over direct child nodes using the FirstChild / NextSibling and LastChild / PreviousSibling methods.The input XML, available at http://www.chilkatsoft.com/data/fruit.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
nextSibling.i
prevSibling.i
success = CkXml::ckLoadXmlFile(xml,"qa_data/xml/fruit.xml")
If success <> 1
Debug CkXml::ckLastErrorText(xml)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
; Iterate over the direct children by using FirstChild / NextSibling
child = CkXml::ckFirstChild(xml)
bContinue.i = CkXml::ckLastMethodSuccess(xml)
While (bContinue = 1)
Debug CkXml::ckTag(child) + " : " + CkXml::ckContent(child)
nextSibling = CkXml::ckNextSibling(child)
bContinue = CkXml::ckLastMethodSuccess(child)
CkXml::ckDispose(child)
child = nextSibling
Wend
Debug "-----"
; Do the same, but with FirstChild2 / NextSibling2 to avoid
; creating so many XML object instances:
success = CkXml::ckFirstChild2(xml)
While success = 1
Debug CkXml::ckTag(xml) + " : " + CkXml::ckContent(xml)
success = CkXml::ckNextSibling2(xml)
Wend
; Revert back up to the parent:
success = CkXml::ckGetParent2(xml)
Debug "-----"
; Iterate in reverse order using LastChild / PreviousSibling
child = CkXml::ckLastChild(xml)
bContinue = CkXml::ckLastMethodSuccess(xml)
While (bContinue = 1)
Debug CkXml::ckTag(child) + " : " + CkXml::ckContent(child)
prevSibling = CkXml::ckPreviousSibling(child)
bContinue = CkXml::ckLastMethodSuccess(child)
CkXml::ckDispose(child)
child = prevSibling
Wend
Debug "-----"
; Do the same, but with LastChild2 / PreviousSibling2 to avoid
; creating so many XML object instances:
success = CkXml::ckLastChild2(xml)
While success = 1
Debug CkXml::ckTag(xml) + " : " + CkXml::ckContent(xml)
success = CkXml::ckPreviousSibling2(xml)
Wend
; Revert back up to the parent:
success = CkXml::ckGetParent2(xml)
CkXml::ckDispose(xml)
ProcedureReturn
EndProcedure