【发布时间】:2010-10-13 19:57:57
【问题描述】:
尽管可以使用单引号或双引号定义 XML 属性,但我的用户正在尝试将我的软件与另一个不接受单引号属性值的软件集成。
我使用 REXML 来生成我的 XML。
有没有办法让 REXML 生成双引号属性值? 如果没有,有没有办法让我轻松转换它?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby xml rexml
尽管可以使用单引号或双引号定义 XML 属性,但我的用户正在尝试将我的软件与另一个不接受单引号属性值的软件集成。
我使用 REXML 来生成我的 XML。
有没有办法让 REXML 生成双引号属性值? 如果没有,有没有办法让我轻松转换它?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby xml rexml
As of Feb 2007 有一种确定引用字符的受支持方法。 were merged 于 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"/>
$
【讨论】:
:quote 以获得双引号作为属性“容器”。这让我很困惑,因为我首先尝试将其设置为 :double_quote。
我已经看到了执行此操作的代码。但它来自 2003 年的邮件列表帖子,它也承诺提供一种更优雅(和受支持)的方式。可能不是最好的,但它可以工作,试一试。
REXML::Attribute.class_eval( %q^
def to_string
%Q[#@expanded_name="#{to_s().gsub(/"/, '"')}"]
end
^ )
【讨论】: