 
 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" |