Forum: Ruby REXML and entities

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
501dac4c25141b9ecffecf6819fe086b?d=identicon&s=25 Pawel Szymczykowski (makenai)
on 2006-03-31 02:52
(Received via mailing list)
Hi,

I've been trying to use REXML to process an XML file with entities,
but I can't seem to get it to leave my entities alone even with the
:raw context set. The simplified example looks something like this:

---
# song.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Song [
<!ELEMENT Song (lyric*)>
<!ELEMENT lyric (#PCDATA)>
<!ENTITY convoy "we got a great big convoy">
<!ENTITY rubberduck "ain't she a beautiful sight">
]>
<Song>
  <lyric>&convoy;</lyric>
  <lyric>&rubberduck;</lyric>
</Song>
---
# script.rb:
doc = Document.new File.open('song.xml', 'r'), { :raw => :all }

doc.elements.each('Song/lyric') do |lyric|
  puts lyric.raw # This prints 'true'
  puts lyric.text # This always has its entities decoded!
end
---
# output:
true
we got a great big convoy
true
ain't she a beautiful sight
---
# desired output:
true
&convoy;
true
&rubberduck;
---

When I take out the { :raw => :all } part, the entry.raw line returns
nil, but the output isn't changed. Am I misunderstanding how this is
supposed to work, or is it broken? How can I get the entities back in
an unencoded form? This is driving me crazy.

Thanks!

-Pawel
This topic is locked and can not be replied to.