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