Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert an arbitrary string to xml in ruby

Tags:

string

xml

ruby

If I have a string which may contain any characters (including '/', '&',etc...) how do convert it safely into XML that can be stored like this:

<myelement>mystring</myelement>

Does it need to be CDATA, or can I easily convert it using a ruby function?

like image 673
cmaughan Avatar asked Sep 18 '09 10:09

cmaughan


4 Answers

In Ruby 1.9.2 to escape XML special characters in Strings, use the 'encode' method.

Example, if you have:

my_string = 'this is "my" complicated <String>'

For XML attributes use:

"<node attr=#{my_string.encode(:xml => :attr)} />"

Generates:

<node attr="this is &quot;my&quot; complicated &lt;String&gt;" />

For XML text use:

"<node>#{my_string.encode(:xml => :text)}</node>"

Generates:

<node>this is "my" complicated &lt;String&gt;</node>
like image 167
salidux Avatar answered Oct 02 '22 03:10

salidux


require 'rexml/document'
doc = REXML::Document.new
root = doc.add_element "Alpha"
root.add_text "now is & the < time > ' for \" me"
doc.write

Produces:

<Alpha>now is &amp; the &lt; time &gt; &apos; for &quot; me</Alpha>
like image 27
DigitalRoss Avatar answered Oct 02 '22 04:10

DigitalRoss


The CGI module has an escapeHTML method.

CGI.escapeHTML("&<>")
#=> "&amp;&lt;&gt;"
like image 43
sepp2k Avatar answered Oct 02 '22 05:10

sepp2k


This answer is mostly for Rails, but, however, might be useful. I looked up how rails .to_xml works and found out you can use Builder::XChar#encode from builder gem.

Builder::XChar.encode(%(this is "my" complicated <String>\v))
#=> "this is \"my\" complicated &lt;String&gt;�"
like image 35
Ngoral Avatar answered Oct 02 '22 05:10

Ngoral