Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) XML SearchForAttribute MethodDemonstrates the SearchForAttribute method. The input XML, available at http://www.chilkatsoft.com/data/fruitSearch.xml, is this: <root> <searchRoot> <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> </searchRoot> <fruit color="red">strawberry</fruit> <fruit color="orange">peach</fruit> </root>
Use ChilkatAx-win32.pkg Procedure Test Handle hoXml Variant vXSearchRoot Handle hoXSearchRoot Variant vXBeginAfter Handle hoXBeginAfter Variant vXFound Handle hoXFound Boolean iSuccess Variant vXSearch Handle hoXSearch String sTemp1 String sTemp2 Boolean bTemp1 Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Get ComLoadXmlFile Of hoXml "qa_data/xml/fruitSearch.xml" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoXml To sTemp1 Showln sTemp1 Procedure_Return End // Search the sub-tree rooted at "searchRoot" Get ComFindChild Of hoXml "searchRoot" To vXSearchRoot If (IsComObject(vXSearchRoot)) Begin Get Create (RefClass(cComChilkatXml)) To hoXSearchRoot Set pvComObject Of hoXSearchRoot To vXSearchRoot End Get ComLastMethodSuccess Of hoXml To bTemp1 If (bTemp1 = False) Begin Showln "searchRoot not found, searching from root." Get ComGetRoot Of hoXml To vXSearchRoot If (IsComObject(vXSearchRoot)) Begin Get Create (RefClass(cComChilkatXml)) To hoXSearchRoot Set pvComObject Of hoXSearchRoot To vXSearchRoot End End // Search for all "fruit" nodes having a color attribute // where the name of the color ends in "e" Get ComGetSelf Of hoXSearchRoot To vXBeginAfter If (IsComObject(vXBeginAfter)) Begin Get Create (RefClass(cComChilkatXml)) To hoXBeginAfter Set pvComObject Of hoXBeginAfter To vXBeginAfter End Get ComSearchForAttribute Of hoXSearchRoot vXBeginAfter "fruit" "color" "*e" To vXFound If (IsComObject(vXFound)) Begin Get Create (RefClass(cComChilkatXml)) To hoXFound Set pvComObject Of hoXFound To vXFound End While ((ComLastMethodSuccess(hoXSearchRoot)) = True) Get ComContent Of hoXFound To sTemp1 Get ComGetAttrValue Of hoXFound "color" To sTemp2 Showln sTemp1 ": " sTemp2 Send Destroy of hoXBeginAfter Move hoXFound To hoXBeginAfter Get ComSearchForAttribute Of hoXSearchRoot vXBeginAfter "fruit" "color" "*e" To vXFound If (IsComObject(vXFound)) Begin Get Create (RefClass(cComChilkatXml)) To hoXFound Set pvComObject Of hoXFound To vXFound End Loop // The correct output is: // grape: purple // blueberry: blue Send Destroy of hoXBeginAfter Showln "--------------------------" // --------------------------------------------------------------------------------- // Now do the same, but instead use SearchForAttribute2 // which updates the internal reference of the caller instead // of returning the found node. Get ComGetSelf Of hoXSearchRoot To vXBeginAfter If (IsComObject(vXBeginAfter)) Begin Get Create (RefClass(cComChilkatXml)) To hoXBeginAfter Set pvComObject Of hoXBeginAfter To vXBeginAfter End Get ComGetSelf Of hoXSearchRoot To vXSearch If (IsComObject(vXSearch)) Begin Get Create (RefClass(cComChilkatXml)) To hoXSearch Set pvComObject Of hoXSearch To vXSearch End Get ComSearchForAttribute2 Of hoXSearch vXBeginAfter "fruit" "color" "*e" To iSuccess While (iSuccess = True) Get ComContent Of hoXSearch To sTemp1 Get ComGetAttrValue Of hoXSearch "color" To sTemp2 Showln sTemp1 ": " sTemp2 // Copy the internal references so that the next search // begins after the found node. Send ComCopyRef To hoXBeginAfter vXSearch Send ComCopyRef To hoXSearch vXSearchRoot Get ComSearchForAttribute2 Of hoXSearch vXBeginAfter "fruit" "color" "*e" To iSuccess Loop Send Destroy of hoXSearch Send Destroy of hoXBeginAfter Send Destroy of hoXSearchRoot End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.