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

在ruby中将任意字符串转换为xml,xml,ruby,string,Xml,Ruby,String,如果我有一个可能包含任何字符的字符串(包括“/”、“&”等),如何将其安全地转换为XML,并以如下方式存储: <myelement>mystring</myelement> mystring 它需要是CDATA吗,或者我可以使用ruby函数轻松地转换它吗?CGI模块有一个escapeHTML方法 CGI.escapeHTML("&<>") #=> "&amp;&lt;&gt;" CGI.escapeHTML(&) #

如果我有一个可能包含任何字符的字符串(包括“/”、“&”等),如何将其安全地转换为XML,并以如下方式存储:

<myelement>mystring</myelement>
mystring

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

CGI模块有一个escapeHTML方法

CGI.escapeHTML("&<>")
#=> "&amp;&lt;&gt;"
CGI.escapeHTML(&)
#=>“&;”
要求“rexml/文档”
doc=REXML::Document.new
root=doc.add_元素“Alpha”
root.add_text“现在是我的时间”
博士写
产生:

<Alpha>now is &amp; the &lt; time &gt; &apos; for &quot; me</Alpha>
现在是“我”的时候了

ruby中有一个名为REXML的库,用于处理xml。 它可能对你需要的东西有用。这里有一个到教程的链接。
在Ruby 1.9.2中,要转义字符串中的XML特殊字符,请使用“encode”方法

例如,如果您有:

my_string = 'this is "my" complicated <String>'
my_string='这是“我的”复杂'
对于XML属性使用:

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

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

对于XML文本使用:

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

<node>this is "my" complicated &lt;String&gt;</node>
这是“我的”复杂字符串

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

Builder::XChar.encode(%(this is "my" complicated <String>\v))
#=> "this is \"my\" complicated &lt;String&gt;�"
Builder::XChar.encode(%(这是“我的”复杂的\v))
#=>“这是“我的”复杂字符串�"

对不起,Jonas,我把xml放在文本中,它被删除了;吸取的教训;必须将它放在代码块中;-)如果提供更多细节来解决这个问题会更好。我认为最好专门使用xml转义而不是HTML转义方法。它不会转义ASCII控制字符。不幸的是,它不会转义所有的XML-无效符号。例如,
\v
Builder::XChar.encode(%(this is "my" complicated <String>\v))
#=> "this is \"my\" complicated &lt;String&gt;�"