Question Convertir une chaîne arbitraire en xml en ruby


Si j'ai une chaîne qui peut contenir des caractères (y compris '/', '&', etc ...), comment la convertir en XML en toute sécurité?

<myelement>mystring</myelement>

Doit-il être CDATA ou puis-je facilement le convertir en utilisant une fonction ruby?


19
2017-09-18 10:52


origine


Réponses:


Dans Ruby 1.9.2, pour échapper aux caractères spéciaux XML dans les chaînes, utilisez la méthode «encoder».

Exemple, si vous avez:

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

Pour Attributs XML utilisation:

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

Génère:

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

Pour Texte XML utilisation:

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

Génère:

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

45
2017-09-27 18:18



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

Produit:

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

6
2017-09-18 11:35



Le module CGI a une méthode escapeHTML.

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

5
2017-09-18 10:59



Il existe une bibliothèque en ruby ​​appelée REXML pour travailler avec xml. Cela peut être utile pour ce dont vous avez besoin. Voici un lien vers un tutoriel. http://www.germane-software.com/software/rexml/docs/tutorial.html


0
2018-06-29 04:57