Reputation: 2634
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?
Upvotes: 25
Views: 17112
Reputation: 4824
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 <String>�"
Upvotes: 4
Reputation: 626
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 "my" complicated <String>" />
For XML text use:
"<node>#{my_string.encode(:xml => :text)}</node>"
Generates:
<node>this is "my" complicated <String></node>
Upvotes: 55
Reputation: 9
There is a library in ruby called REXML for working with xml. It might be useful for what you need. Here's a link to a tutorial. http://www.germane-software.com/software/rexml/docs/tutorial.html
Upvotes: 0
Reputation: 146141
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 & the < time > ' for " me</Alpha>
Upvotes: 6
Reputation: 370387
The CGI module has an escapeHTML method.
CGI.escapeHTML("&<>")
#=> "&<>"
Upvotes: 5