DataFlex
DataFlex
Demonstrate XML SearchForTag2
Demonstrates how to use SearchForTag2.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoXml
Integer i
Variant vXmlSearch
Handle hoXmlSearch
Variant vAfterPtr
Handle hoAfterPtr
Variant vPTemp
Handle hoPTemp
Variant vSbState
Handle hoSbState
String sTemp1
Boolean bTemp1
Move False To iSuccess
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
// 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>
Get ComLoadXml Of hoXml "<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>" To iSuccess
Move 0 To i
Get ComGetRoot Of hoXml To vXmlSearch
If (IsComObject(vXmlSearch)) Begin
Get Create (RefClass(cComChilkatXml)) To hoXmlSearch
Set pvComObject Of hoXmlSearch To vXmlSearch
End
Get ComGetRoot Of hoXml To vAfterPtr
If (IsComObject(vAfterPtr)) Begin
Get Create (RefClass(cComChilkatXml)) To hoAfterPtr
Set pvComObject Of hoAfterPtr To vAfterPtr
End
// Alway begin the search from the root.
While (ComSearchForTag2(hoXmlSearch, vAfterPtr, "testchild1"))
// If successful, xmlSearch now points to the found element.
Move (i + 1) To i
// 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.
Get ComContent Of hoXmlSearch To sTemp1
Showln i ": " sTemp1
Move hoAfterPtr To hoPTemp
Move hoXmlSearch To hoAfterPtr
Send ComGetRoot2 To hoPTemp
Move hoPTemp To hoXmlSearch
Loop
Send Destroy of hoXmlSearch
Send Destroy of hoAfterPtr
Showln "----"
// A better way:
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbState
If (Not(IsComObjectCreated(hoSbState))) Begin
Send CreateComObject of hoSbState
End
Move 0 To i
Get pvComObject of hoSbState to vSbState
While ((ComNextInTraversal2(hoXml, vSbState)) <> False)
Get ComTagEquals Of hoXml "testchild1" To bTemp1
If (bTemp1 = True) Begin
Get ComContent Of hoXml To sTemp1
Showln i ": " sTemp1
Move (i + 1) To i
End
Loop
Send ComGetRoot2 To hoXml
End_Procedure