11

尽管可以使用单引号或双引号定义 XML 属性,但我的用户正在尝试将我的软件与另一个不接受单引号属性值的软件集成。

我使用 REXML 来生成我的 XML。

有没有办法 REXML 生成双引号属性值?如果没有,有没有办法让我轻松转换它?

谢谢

4

2 回答 2

19

截至 2007 年 2 月,支持确定引用字符的方式。这些更改已于 2007 年 7 月合并到 Ruby 源代码中,并且应该适用于自 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"/>
$
于 2010-10-15T15:24:33.490 回答
2

我已经看到了这个代码来做到这一点。但它来自 2003 年的邮件列表帖子,它也承诺提供一种更优雅(和受支持)的方式。可能不是最好的,但它可以工作,试一试。

REXML::Attribute.class_eval( %q^
    def to_string
      %Q[#@expanded_name="#{to_s().gsub(/"/, '&quot;')}"]
    end
  ^ )
于 2010-10-13T21:29:41.380 回答