在ruby中将任意字符串转换为xml

cma*_*han 25 ruby xml string

如果我有一个可能包含任何字符的字符串(包括'/','&'等等),如何将其安全地转换为可以像这样存储的XML:

<myelement>mystring</myelement>
Run Code Online (Sandbox Code Playgroud)

它需要是CDATA,还是可以使用ruby函数轻松转换它?

小智 51

在Ruby 1.9.2中,要转义字符串中的XML特殊字符,请使用'encode'方法.

例如,如果你有:

my_string = 'this is "my" complicated <String>'
Run Code Online (Sandbox Code Playgroud)

对于XML属性,请使用:

"<node attr=#{my_string.encode(:xml => :attr)} />"
Run Code Online (Sandbox Code Playgroud)

产生:

<node attr="this is &quot;my&quot; complicated &lt;String&gt;" />
Run Code Online (Sandbox Code Playgroud)

对于XML文本使用:

"<node>#{my_string.encode(:xml => :text)}</node>"
Run Code Online (Sandbox Code Playgroud)

产生:

<node>this is "my" complicated &lt;String&gt;</node>
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 6

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

生产:

<Alpha>now is &amp; the &lt; time &gt; &apos; for &quot; me</Alpha>
Run Code Online (Sandbox Code Playgroud)


sep*_*p2k 5

CGI模块具有escapeHTML方法.

CGI.escapeHTML("&<>")
#=> "&amp;&lt;&gt;"
Run Code Online (Sandbox Code Playgroud)