DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoXml
Variant vChild
Handle hoChild
Variant vNextSibling
Handle hoNextSibling
Variant vPrevSibling
Handle hoPrevSibling
Boolean iBContinue
String sTemp1
String sTemp2
Move False To iSuccess
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Get ComLoadXmlFile Of hoXml "qa_data/xml/fruit.xml" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoXml To sTemp1
Showln sTemp1
Procedure_Return
End
// Iterate over the direct children by using FirstChild / NextSibling
Get ComFirstChild Of hoXml To vChild
If (IsComObject(vChild)) Begin
Get Create (RefClass(cComChilkatXml)) To hoChild
Set pvComObject Of hoChild To vChild
End
Get ComLastMethodSuccess Of hoXml To iBContinue
While (iBContinue = True)
Get ComTag Of hoChild To sTemp1
Get ComContent Of hoChild To sTemp2
Showln sTemp1 " : " sTemp2
Get ComNextSibling Of hoChild To vNextSibling
If (IsComObject(vNextSibling)) Begin
Get Create (RefClass(cComChilkatXml)) To hoNextSibling
Set pvComObject Of hoNextSibling To vNextSibling
End
Get ComLastMethodSuccess Of hoChild To iBContinue
Send Destroy of hoChild
Move hoNextSibling To hoChild
Loop
Showln "-----"
// Do the same, but with FirstChild2 / NextSibling2 to avoid
// creating so many XML object instances:
Get ComFirstChild2 Of hoXml To iSuccess
While (iSuccess = True)
Get ComTag Of hoXml To sTemp1
Get ComContent Of hoXml To sTemp2
Showln sTemp1 " : " sTemp2
Get ComNextSibling2 Of hoXml To iSuccess
Loop
// Revert back up to the parent:
Get ComGetParent2 Of hoXml To iSuccess
Showln "-----"
// Iterate in reverse order using LastChild / PreviousSibling
Get ComLastChild Of hoXml To vChild
If (IsComObject(vChild)) Begin
Get Create (RefClass(cComChilkatXml)) To hoChild
Set pvComObject Of hoChild To vChild
End
Get ComLastMethodSuccess Of hoXml To iBContinue
While (iBContinue = True)
Get ComTag Of hoChild To sTemp1
Get ComContent Of hoChild To sTemp2
Showln sTemp1 " : " sTemp2
Get ComPreviousSibling Of hoChild To vPrevSibling
If (IsComObject(vPrevSibling)) Begin
Get Create (RefClass(cComChilkatXml)) To hoPrevSibling
Set pvComObject Of hoPrevSibling To vPrevSibling
End
Get ComLastMethodSuccess Of hoChild To iBContinue
Send Destroy of hoChild
Move hoPrevSibling To hoChild
Loop
Showln "-----"
// Do the same, but with LastChild2 / PreviousSibling2 to avoid
// creating so many XML object instances:
Get ComLastChild2 Of hoXml To iSuccess
While (iSuccess = True)
Get ComTag Of hoXml To sTemp1
Get ComContent Of hoXml To sTemp2
Showln sTemp1 " : " sTemp2
Get ComPreviousSibling2 Of hoXml To iSuccess
Loop
// Revert back up to the parent:
Get ComGetParent2 Of hoXml To iSuccess
End_Procedure