 
 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.
| Creating and Modifying XML Documents | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'rexml/document'
require
doc = REXML::Document.new
meeting = doc.add_element 'meeting'
meeting_start = Time.local(2006, 10, 31, 13)
meeting.add_element('time', { 'from' => meeting_start,
                              'to' => meeting_start + 3600 })
doc.children[0] | <meeting> ... </> | <meeting> ... </> | 
| doc.children[0].children[0] | "<time from='Tue Oct 31 13:00:00 EST 2006' | <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/> | 
| doc.write($stdout, 1) | <meeting> <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/> </meeting> | <meeting>
    <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/>
  </meeting> | 
| doc.children[0] | <?xml ... ?> | <?xml ... ?> | 
| doc.children[1] | <meeting> ... </> | <meeting> ... </> | 
| agenda = meeting.add_element 'agenda' doc.children[1].children[1] | <agenda/> | <agenda/> | 
| agenda.add_text "Nothing of importance will be decided." agenda.add_text " The same tired ideas will be rehashed yet again." doc.children[1].children[1] | <agenda> ... </> | <agenda> ... </> | 
| doc.write($stdout, 1) | <meeting> <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/> <agenda> Nothing of importance will be decided. The same tired ideas will be rehashed yet again. </agenda> </meeting> | <meeting>
    <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/>
    <agenda>Nothing of importance will be decided. The same tired ideas will be rehashed yet again.</agenda>
  </meeting> | 
| item1 = agenda.add_element 'item' doc.children[1].children[1].children[1] | <item/> | <item/> | 
| item1.text = 'Weekly status meetings: improving attendance' doc.children[1].children[1].children[1] | <item> ... </> | <item> ... </> | 
| doc.write($stdout, 1) | <meeting> <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/> <agenda> Nothing of importance will be decided. The same tired ideas will be rehashed yet again. <item>Weekly status meetings: improving attendance</item> </agenda> </meeting> | <meeting>
    <time from='Tue Oct 31 13:00:00 EST 2006' to='Tue Oct 31 14:00:00 EST 2006'/>
    <agenda>Nothing of importance will be decided. The same tired ideas will be rehashed yet again.<item>Weekly status meetings: improving attendance</item>
    </agenda>
  </meeting> | 
| doc = REXML::Document.new %{<?xml version='1.0'?>
<girl size="little">
 <foods>
  <sugar />
  <spice />
 </foods>
 <set of="nice things" cardinality="all" />
</girl>
}
root = doc[1] | <girl size='little'> ... </> | <girl size='little'> ... </> | 
| root.name = 'boy'
root.elements['//sugar'].name = 'snails'
root.delete_element('//spice')
set = root.elements['//set']
set.attributes["of"] = "snips"
set.attributes["cardinality"] = 'some'
root.add_element('set', {'of' => 'puppy dog tails', 'cardinality' => 'some' })
doc.write | <?xml version='1.0'?> <boy size='little'> <foods> <snails/> </foods> <set of='snips' cardinality='some'/> <set of='puppy dog tails' cardinality='some'/></boy> | <?xml version='1.0'?><boy size='little'> <foods> <snails/> </foods> <set of='snips' cardinality='some'/> <set of='puppy dog tails' cardinality='some'/></boy> | 
| root.attributes['size'] = nil doc.write($stdout, 0) | <?xml version='1.0'?> <boy> <foods> ... </boy> | <?xml version='1.0'?> <boy> <foods> <snails/> </foods> <set of='snips' cardinality='some'/> <set of='puppy dog tails' cardinality='some'/> </boy> | 
| doc.elements["//snails"].replace_with(REXML::Element.new("escargot"))
class REXML::Element
  def with_element(*args)
    e = add_element(*args)
    yield e if block_given?
  end
end 
doc = REXML::Document.new
doc.with_element('girl', {'size' => 'little'}) do |girl|
  girl.with_element('foods') do |foods| 
    foods.add_element('sugar')
    foods.add_element('spice') 
  end
  girl.add_element('set', {'of' => 'nice things', 'cardinality' => 'all'})
end
doc.write($stdout, 0) | <girl size='little'> <foods> <sugar/> <spice/> </foods> <set of='nice things' cardinality='all'/> </girl> | <girl size='little'>
  <foods>
    <sugar/>
    <spice/>
  </foods>
  <set of='nice things' cardinality='all'/>
</girl> |