2009-09-18 14 views
18

Se si dispone di una stringa che può contenere qualsiasi carattere (incluso '/', '&', ecc.) Come convertirlo in XML in modo sicuro che può essere archiviato in questo modo:Convertire una stringa arbitraria in xml in rubino

<myelement>mystring</myelement> 

Ha bisogno di essere CDATA o posso convertirlo facilmente utilizzando una funzione di rubino?

+0

Come cosa mystring? –

+0

Scusa Jonas, ho inserito l'xml nel testo e l'ho rimosso; lezione appresa; dovevo posizionarlo in un blocco di codice ;-) – cmaughan

risposta

43

In Ruby 1.9.2 per sfuggire ai caratteri speciali XML nelle stringhe, utilizzare il metodo 'encode'.

esempio, se si dispone di:

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

Per attributi XML uso:

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

Genera:

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

Per XML testo uso:

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

Genera:

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

Il modulo CGI ha un metodo escapeHTML.

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

Penso che sia meglio usare specificamente l'escape XML piuttosto che i metodi di escape HTML. – fatuhoku

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

produce:

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