Lua
Lua
XML SearchForAttribute Method
See more XML Examples
Demonstrates 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>
Chilkat Lua Downloads
local chilkat = require("chilkat")
local xml = chilkat.Xml.new()
local success = xml:load_xml_file("qa_data/xml/fruitSearch.xml")
if not success then
print(xml.last_error_text)
return
end
-- Search the sub-tree rooted at "searchRoot";
local xSearchRoot = xml:find_child("searchRoot")
if not xml.last_method_success then
print("searchRoot not found, searching from root.")
xSearchRoot = xml:get_root()
end
-- Search for all "fruit" nodes having a color attribute
-- where the name of the color ends in "e";
local xBeginAfter = xSearchRoot:get_self()
local xFound = xSearchRoot:search_for_attribute(xBeginAfter, "fruit", "color", "*e")
while xSearchRoot.last_method_success do
print(xFound.content .. ": " .. xFound:get_attr_value("color"))
xBeginAfter = xFound
xFound = xSearchRoot:search_for_attribute(xBeginAfter, "fruit", "color", "*e")
end
-- The correct output is:
-- grape: purple
-- blueberry: blue
print("--------------------------")
-- ---------------------------------------------------------------------------------
-- Now do the same, but instead use SearchForAttribute2
-- which updates the internal reference of the caller instead
-- of returning the found node.
xBeginAfter = xSearchRoot:get_self()
local xSearch = xSearchRoot:get_self()
success = xSearch:search_for_attribute2(xBeginAfter, "fruit", "color", "*e")
while success do
print(xSearch.content .. ": " .. xSearch:get_attr_value("color"))
-- Copy the internal references so that the next search
-- begins after the found node.
xBeginAfter:copy_ref(xSearch)
xSearch:copy_ref(xSearchRoot)
success = xSearch:search_for_attribute2(xBeginAfter, "fruit", "color", "*e")
end