2009-09-18 26 views
18

如果我有一個可能包含任何字符(包括'/','&'等等)的字符串,那麼如何將其安全地轉換爲可以像這樣存儲的XML:在ruby中將任意字符串轉換爲xml

<myelement>mystring</myelement> 

它是否需要CDATA,或者我可以使用ruby函數輕鬆轉換它嗎?

+0

什麼樣的事情了mystring? – 2009-09-18 11:05:14

+0

對不起,喬納斯,我把XML放在文本中,它被刪除;學過的知識;必須把它放在代碼塊中;-) – cmaughan 2009-09-18 11:21:08

回答

43

在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> 
5

CGI模塊有一個escapeHTML方法。

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

我認爲專門使用XML轉義而不是HTML轉義方法更好。如果提供更多的細節來解決這個問題,那麼 – fatuhoku 2016-09-02 13:31:47

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>