Преобразовать произвольную строку в xml в ruby - PullRequest
24 голосов
/ 18 сентября 2009

Если у меня есть строка, которая может содержать любые символы (включая «/», «&» и т. Д.), Как безопасно преобразовать ее в XML, который можно сохранить следующим образом:

<myelement>mystring</myelement>

Это должен быть CDATA, или я могу легко конвертировать его с помощью функции ruby?

Ответы [ 5 ]

50 голосов
/ 27 сентября 2011

В 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>
6 голосов
/ 18 сентября 2009
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>
5 голосов
/ 18 сентября 2009

Модуль CGI имеет метод escapeHTML.

CGI.escapeHTML("&<>")
#=> "&amp;&lt;&gt;"
0 голосов
/ 16 января 2019

Этот ответ в основном для Rails, но, тем не менее, может быть полезен. Я посмотрел, как работают рельсы .to_xml, и обнаружил, что вы можете использовать Builder::XChar#encode из builder драгоценного камня.

Builder::XChar.encode(%(this is "my" complicated <String>\v))
#=> "this is \"my\" complicated &lt;String&gt;�"
0 голосов
/ 29 июня 2010

В ruby ​​есть библиотека REXML для работы с XML Это может быть полезно для того, что вам нужно. Вот ссылка на учебник. http://www.germane -software.com / Программное обеспечение / REXML / документы / tutorial.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...