Ruby конвертирует одинарные кавычки в двойные в XML - PullRequest
11 голосов
/ 13 октября 2010

Несмотря на то, что атрибуты XML могут быть определены с помощью одинарных или двойных кавычек, мой пользователь пытается интегрировать мое программное обеспечение с другим, которое не будет принимать значения атрибута с одинарными кавычками.

Я использую REXML для генерации моегоXML.

Есть ли способ, чтобы REXML генерировал значения атрибутов в двойных кавычках?Если нет, то есть ли способ легко конвертировать его?

Спасибо

Ответы [ 2 ]

19 голосов
/ 15 октября 2010

По состоянию на февраль 2007 года существует поддерживаемый способ определения символа цитирования. Изменения были объединены в источники Ruby в июле 2007 года и должны быть доступны во всех версиях начиная с 1.8.6-p110:

require 'rexml/document'

doc = REXML::Document.new
doc.context[:attribute_quote] = :quote  # <-- Set double-quote as the attribute value delimiter

root = doc.add_element('root')
root.add_attribute('val', '123')

doc.write(STDOUT)

Запуск, который дает:

$ ruby test.rb
<root val="123"/>
$
2 голосов
/ 14 октября 2010

Я видел этот код, чтобы сделать это.Но это из сообщения списка рассылки 2003 года, которое также обещает более элегантный (и поддерживаемый) способ сделать это.Может быть не лучшим, но это может сработать, попробуйте.

REXML::Attribute.class_eval( %q^
    def to_string
      %Q[#@expanded_name="#{to_s().gsub(/"/, '&quot;')}"]
    end
  ^ )
...