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
(AutoIt) 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>
$oXml = ObjCreate("Chilkat.Xml") Local $oXSearchRoot Local $oXBeginAfter Local $oXFound Local $bSuccess = $oXml.LoadXmlFile("qa_data/xml/fruitSearch.xml") If ($bSuccess <> True) Then ConsoleWrite($oXml.LastErrorText & @CRLF) Exit EndIf ; Search the sub-tree rooted at "searchRoot" $oXSearchRoot = $oXml.FindChild("searchRoot") If ($oXml.LastMethodSuccess = False) Then ConsoleWrite("searchRoot not found, searching from root." & @CRLF) $oXSearchRoot = $oXml.GetRoot() EndIf ; Search for all "fruit" nodes having a color attribute ; where the name of the color ends in "e" $oXBeginAfter = $oXSearchRoot.GetSelf() $oXFound = $oXSearchRoot.SearchForAttribute($oXBeginAfter,"fruit","color","*e") While ($oXSearchRoot.LastMethodSuccess = True) ConsoleWrite($oXFound.Content & ": " & $oXFound.GetAttrValue("color") & @CRLF) $oXBeginAfter = $oXFound $oXFound = $oXSearchRoot.SearchForAttribute($oXBeginAfter,"fruit","color","*e") Wend ; The correct output is: ; grape: purple ; blueberry: blue ConsoleWrite("--------------------------" & @CRLF) ; --------------------------------------------------------------------------------- ; Now do the same, but instead use SearchForAttribute2 ; which updates the internal reference of the caller instead ; of returning the found node. Local $oXSearch $oXBeginAfter = $oXSearchRoot.GetSelf() $oXSearch = $oXSearchRoot.GetSelf() $bSuccess = $oXSearch.SearchForAttribute2($oXBeginAfter,"fruit","color","*e") While $bSuccess = True ConsoleWrite($oXSearch.Content & ": " & $oXSearch.GetAttrValue("color") & @CRLF) ; Copy the internal references so that the next search ; begins after the found node. $oXBeginAfter.CopyRef $oXSearch $oXSearch.CopyRef $oXSearchRoot $bSuccess = $oXSearch.SearchForAttribute2($oXBeginAfter,"fruit","color","*e") Wend |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.