 
 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.
| Substituting XML Entities | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'rexml/document'
str = %{<?xml version="1.0"?>
<!DOCTYPE doc [
 <!ENTITY product 'Stargaze'>
 <!ENTITY version '2.3'>
]>
<doc>
 &product; v&version; is the most advanced astronomy product on the market.
</doc>}
doc = REXML::Document.new str
doc.root.children[0].value | "\n Stargaze v2.3 is the most advanced astronomy product on the market.\n" | "\n Stargaze v2.3 is the most advanced astronomy product on the market.\n" | 
| doc.root.text | "\n Stargaze v2.3 is the most advanced astronomy product on the market.\n" | "\n Stargaze v2.3 is the most advanced astronomy product on the market.\n" | 
| doc.root.children[0].to_s | "\n &product; v&version; is the most advanced astronomy product on the market.\n" | "\n &product; v&version; is the most advanced astronomy product on the market.\n" | 
| doc.root.write | <doc> &product; v&version; is the most advanced astronomy program on the market. </doc> | <doc> &product; v&version; is the most advanced astronomy product on the market. </doc> | 
| require 'delegate'
require 'rexml/text'
class EntitySubstituter < DelegateClass(IO)
  def initialize(io, document, filter=nil)
    @document = document
    @filter = filter
    super(io)
  end
  def <<(s)
    super(REXML::Text::unnormalize(s, @document.doctype, @filter))
  end
end
output = EntitySubstituter.new($stdout, doc)
doc.write(output) | <?xml version='1.0'?><!DOCTYPE doc [ <!ENTITY product "Stargaze"> <!ENTITY version "2.3"> ]> <doc> Stargaze v2.3 is the most advanced astronomy product on the market. </doc> | <?xml version='1.0'?><!DOCTYPE doc [ <!ENTITY product "Stargaze"> <!ENTITY version "2.3"> ]> <doc> Stargaze v2.3 is the most advanced astronomy product on the market. </doc> | 
| text_node = doc.root.children[0]
text_node.value = "&product; v&version; has a catalogue of 2.3 " +
                  "million celestial objects."
doc.write | <?xml version='1.0'?><!DOCTYPE doc [ <!ENTITY product "Stargaze"> <!ENTITY version "2.3"> ]> <doc>&product; v&version; has a catalogue of &version; million celestial objects.</doc> | <?xml version='1.0'?><!DOCTYPE doc [ <!ENTITY product "Stargaze"> <!ENTITY version "2.3"> ]> <doc>&product; v&version; has a catalogue of &version; million celestial objects.</doc> | 
| text_node.raw = true doc.write | <?xml version='1.0'?><!DOCTYPE doc [ <!ENTITY product "Stargaze"> <!ENTITY version "2.3"> ]> <doc>&product; v&version; has a catalogue of 2.3 million celestial objects.</doc> | <?xml version='1.0'?><!DOCTYPE doc [ <!ENTITY product "Stargaze"> <!ENTITY version "2.3"> ]> <doc>&product; v&version; has a catalogue of 2.3 million celestial objects.</doc> | 
| text_node.value | "Stargaze v2.3 has a catalogue of 2.3 million celestial objects." | "Stargaze v2.3 has a catalogue of 2.3 million celestial objects." | 
| text_node.to_s | "&product; v&version; has a catalogue of 2.3 million celestial objects." | "&product; v&version; has a catalogue of 2.3 million celestial objects." | 
| str = %{
  <!DOCTYPE doc [ <!ENTITY year '2006'> ]>
  <doc>© &year; Komodo Dragon & Bob Productions</doc>
}
doc = REXML::Document.new str
text_node = doc.root.children[0]
text_node.value | "© 2006 Komodo Dragon & Bob Productions" | "© 2006 Komodo Dragon & Bob Productions" | 
| text_node.to_s | "© &year; Komodo Dragon & Bob Productions" | "© &year; Komodo Dragon & Bob Productions" |