DataFlex
DataFlex
XML Tree Traversal Order for Search* Methods
See more XML Examples
The Chilkat XML API provides a number of Search* methods for locating XML nodes based on criteria. These methods traverse an XML document in a breadth-first order. (See Breadth-First Search).The XML document used in this example has the following tree structure:
The nodes are traversed in the order: A, B, C, D, E, F, G, H, I, J, K.
The input XML, available at http://www.chilkatsoft.com/data/searchOrder.xml, is this:
<a>crocodileA
<b>crocodileB
<d>crocodileD</d>
<e>crocodileE
<h>crocodileH</h>
<i>crocodileI</i>
</e>
</b>
<c>crocodileC
<f>crocodileF</f>
<g>crocodileG
<j>crocodileJ</j>
<k>crocodileK</k>
</g>
</c>
</a>
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoXml
Variant vXBeginAfter
Handle hoXBeginAfter
Variant vXFound
Handle hoXFound
String sTemp1
Move False To iSuccess
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
// The sample input XML is available at http://www.chilkatsoft.com/data/searchOrder.xml
Get ComLoadXmlFile Of hoXml "searchOrder.xml" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoXml To sTemp1
Showln sTemp1
Procedure_Return
End
// IMPORTANT: The following loop for iterating over all
// matching nodes performs reasonably well for small to
// mid-size XML documents or sub-trees. Performance
// can be poor when the sub-tree contains many thousands
// of nodes (or more).
// NOTE: The search is always rooted at the calling node.
// In this example, it happens to also be the root node of the entire
// XML document. Searches can be performed on sub-trees
// within the document by calling the Search* method from
// the root node of a sub-tree.
// Demonstrate the breadth-first traversal:
Get ComGetSelf Of hoXml To vXBeginAfter
If (IsComObject(vXBeginAfter)) Begin
Get Create (RefClass(cComChilkatXml)) To hoXBeginAfter
Set pvComObject Of hoXBeginAfter To vXBeginAfter
End
Get ComSearchAllForContent Of hoXml vXBeginAfter "*croc*" To vXFound
If (IsComObject(vXFound)) Begin
Get Create (RefClass(cComChilkatXml)) To hoXFound
Set pvComObject Of hoXFound To vXFound
End
While ((ComLastMethodSuccess(hoXml)) = True)
Get ComTag Of hoXFound To sTemp1
Showln sTemp1
Send Destroy of hoXBeginAfter
Move hoXFound To hoXBeginAfter
Get ComSearchAllForContent Of hoXml vXBeginAfter "*croc*" To vXFound
If (IsComObject(vXFound)) Begin
Get Create (RefClass(cComChilkatXml)) To hoXFound
Set pvComObject Of hoXFound To vXFound
End
Loop
Send Destroy of hoXBeginAfter
End_Procedure