Ruby将单引号转换为XML中的双引号

时间:2010-10-13 19:57:58

标签: ruby-on-rails ruby xml rexml

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

我使用REXML来生成我的XML。

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

由于

2 个答案:

答案 0 :(得分:19)

As of Feb 2007有一种支持的方法来确定引用字符。在2007年7月更改were merged到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"/>
$

答案 1 :(得分:2)

我已经看过这个代码来执行此操作。但它来自2003年的邮件列表帖子,它也承诺采用更优雅(和支持)的方式。可能不是最好的,但它可以工作,试一试。

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