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

时间:2009-09-18 10:52:01

标签: xml ruby string

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

<myelement>mystring</myelement>

是否需要CDATA,或者我可以使用ruby函数轻松转换它吗?

5 个答案:

答案 0 :(得分:50)

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

示例,如果您有:

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

对于 XML属性,请使用:

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

生成:

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

对于 XML文字,请使用:

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

生成:

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

答案 1 :(得分:6)

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

产地:

<Alpha>now is &amp; the &lt; time &gt; &apos; for &quot; me</Alpha>

答案 2 :(得分:5)

CGI模块有一个escapeHTML方法。

CGI.escapeHTML("&<>")
#=> "&amp;&lt;&gt;"

答案 3 :(得分:0)

ruby​​中有一个名为REXML的库,用于处理xml。 它可能对您需要的内容很有用。这是教程的链接。 http://www.germane-software.com/software/rexml/docs/tutorial.html

答案 4 :(得分:0)

这个答案主要是针对Rails的,但是可能有用。我查看了.to_xml导轨的工作原理,发现可以使用Builder::XChar#encode gem中的builder

Builder::XChar.encode(%(this is "my" complicated <String>\v))
#=> "this is \"my\" complicated &lt;String&gt;�"