2009-09-18 8 views
18

Jeśli mam ciąg znaków, który może zawierać dowolne znaki (w tym "/", "&", itp.), Jak przekonwertować go bezpiecznie na format XML, który można zapisać w następujący sposób:Konwertuj dowolny ciąg na xml w rubinie

<myelement>mystring</myelement> 

Czy musi to być CDATA, czy mogę go łatwo przekonwertować za pomocą funkcji ruby?

+0

Jak co mystring? –

+0

Przepraszam Jonas, wstawiłem xml do tekstu i został usunięty; wyciągnięta lekcja; musiałem umieścić go w bloku kodu ;-) – cmaughan

Odpowiedz

43

W Ruby 1.9.2, aby uciec ze znaków specjalnych XML w Ciągach, użyj metody "kodowania".

przykład, jeśli masz:

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

Dla XML atrybuty zastosowanie:

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

Generuje:

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

Dla XML tekstu użycie:

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

Generuje:

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

Moduł CGI ma metodę escapeHTML.

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

Myślę, że lepiej jest użyć raczej ucieczki XML niż metod ucieczki 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 

Produkuje:

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