Unescaped text in REXML


#1

Hi Rubyists,

I’m writing a small app that will be generating HTML programatically
using REXML. Part of the HTML that will be generated is a tag
with some JavaScript in it. However the JavaScript is full of
characters that would normally be escaped elsewhere in HTML and as
such REXML renders it pretty useless by replacing all the <,>,’ and
such like with character entity codes. I’m currently trying to add the
JavaScript as a text element like so:

scriptElement.text = javaScriptCode

which causes all the characters to be escaped. I’ve tried setting the
:raw context to :all for the element but it just causes an exception
to be raised when an escapable character is encountered.

Any ideas on how to get unescaped text in using REXML?

Farrel


#2

That worked! Thanks a stack!


#3

Farrel L. wrote:

Hi Rubyists,

I’m writing a small app that will be generating HTML programatically
using REXML. Part of the HTML that will be generated is a tag
with some JavaScript in it. However the JavaScript is full of
characters that would normally be escaped elsewhere in HTML and as
such REXML renders it pretty useless by replacing all the <,>,’ and
such like with character entity codes. I’m currently trying to add the
JavaScript as a text element like so:

scriptElement.text = javaScriptCode

which causes all the characters to be escaped. I’ve tried setting the
:raw context to :all for the element but it just causes an exception
to be raised when an escapable character is encountered.

Any ideas on how to get unescaped text in using REXML?

I think this is what Ara Howard was battling a few
days ago. This is what he came up with:

element.text =
::REXML::Text::new(
string_we_want_untouched,
respect_whitespace=true,
parent=nil,
raw=true,
entity_filter=nil,
illegal=%r/.^/m # match nothing!
)

Farrel

E


#4

Although I removed the ‘m’ at the end of the illegal parameter. It
seemed to be matching to ‘’ otherwise.


#5

Farrel L. wrote:

scriptElement.text = javaScriptCode

which causes all the characters to be escaped. I’ve tried setting the
:raw context to :all for the element but it just causes an exception
to be raised when an escapable character is encountered.

Any ideas on how to get unescaped text in using REXML?

Consider a CDATA section:

http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/classes/REXML/CData.html

James

http://www.ruby-doc.org - Ruby Help & Documentation
http://www.artima.com/rubycs/ - Ruby Code & Style: Writers wanted
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
http://www.30secondrule.com - Building Better Tools