This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Extracting Data From a Document's Tree Structure (written by Rod Gaither) | ||
|---|---|---|
| Code | Expected | Actual |
orders_xml = %{
<orders>
<order>
<number>105</number>
<date>02/10/2006</date>
<customer>Corner Store</customer>
<items>
<item upc="404100" desc="Red Roses" qty="240" />
<item upc="412002" desc="Candy Hearts" qty="160" />
</items>
</order>
</orders>}
require 'rexml/document'
orders = REXML::Document.new(orders_xml)
orders.root.each_element do |order| # each <order> in <orders>
order.each_element do |node| # <customer>, <items>, etc. in <order>
if node.has_elements?
node.each_element do |child| # each <item> in <items>
puts "#{child.name}: #{child.attributes['desc']}"
end
else
# the contents of <number>, <date>, etc.
puts "#{node.name}: #{node.text}"
end
end
end |
number: 105 date: 02/10/2006 customer: Corner Store item: Red Roses item: Candy Hearts |
number: 105 date: 02/10/2006 customer: Corner Store item: Red Roses item: Candy Hearts |
my_order = orders.root.elements[1] first_node = my_order.elements[1] first_node.name |
"number" | "number" |
first_node.next_element.name |
"date" | "date" |
first_node.parent.name |
"order" | "order" |