【问题标题】:Ruby convert single quotes to double quotes in XMLRuby 将 XML 中的单引号转换为双引号
【发布时间】:2010-10-13 19:57:57
【问题描述】:

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

我使用 REXML 来生成我的 XML。

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

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby xml rexml


    【解决方案1】:

    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
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2013-01-20
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多