Преобразование произвольной строки в xml в ruby
Если у меня есть строка, которая может содержать любые символы (включая "/", "&" и т.д.), как безопасно преобразовать ее в XML, который можно сохранить следующим образом:
<myelement>mystring</myelement>
Нужно ли быть CDATA, или я могу легко преобразовать его с помощью функции ruby?
Ответы
Ответ 1
В Ruby 1.9.2 для исключения специальных символов XML в Strings используйте метод encode.
Пример, если у вас есть:
my_string = 'this is "my" complicated <String>'
Для атрибутов XML используйте:
"<node attr=#{my_string.encode(:xml => :attr)} />"
Формирует:
<node attr="this is "my" complicated <String>" />
Для XML-текста используйте:
"<node>#{my_string.encode(:xml => :text)}</node>"
Создает:
<node>this is "my" complicated <String></node>
Ответ 2
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 & the < time > ' for " me</Alpha>
Ответ 3
Модуль CGI имеет метод escapeHTML.
CGI.escapeHTML("&<>")
#=> "&<>"
Ответ 4
Существует библиотека в ruby, называемая REXML для работы с xml.
Это может быть полезно для вас. Вот ссылка на учебник.
http://www.germane-software.com/software/rexml/docs/tutorial.html
Ответ 5
Этот ответ в основном для Rails, но, тем не менее, может быть полезен. Я посмотрел, как работает rails .to_xml
и выяснил, что вы можете использовать Builder::XChar#encode
из Builder::XChar#encode
builder
.
Builder::XChar.encode(%(this is "my" complicated <String>\v))
#=> "this is \"my\" complicated <String>�"