【问题标题】:Need to use hyphen in a Builder function name需要在 Builder 函数名称中使用连字符
【发布时间】:2011-05-16 17:44:59
【问题描述】:

我正在尝试使用 Builder 为我正在处理的项目构建一个 xml 文档。 xml 的结构非常严格,所以我无法更改它。 我遇到的问题是这个。我正在尝试将孩子添加到节点 "linking-phrase-list" 孩子的名字必须是"linking-phrase"。所以为了做到这一点,我会打电话:

test = Builder.new do |xml|
  xml.map {
    xml.send(:"linking-phrase-list") {
      xml.linking-phrase("label" => "edge1", "id" => "idedge1")
    }
  }
end

当然,ruby 将其解释为(xml.linking)-phrase(),这根本不是我想要的。所以我需要知道是否有某种方法可以说服 ruby​​ 是一个函数调用而不是两个?或者告诉 nokogiri 我的意思是当我不使用该功能时。

【问题讨论】:

    标签: ruby-on-rails ruby xml builder


    【解决方案1】:

    为此目的使用builder提供的tag!方法。

    test = Builder.new do |xml|
      xml.map {
        xml.tag!("linking-phrase-list") {
          xml.tag!("linking-phrase", "label" => "edge1", "id" => "idedge1")
        }
      }
    end
    

    【讨论】:

      【解决方案2】:

      所以,您的问题已经有了答案,请使用send 方法:

      require 'nokogiri'
      
      test = Nokogiri::XML::Builder.new do |xml|
        xml.map {
          xml.send(:"linking-phrase-list") {
            xml.send(:"linking-phrase", "label" => "edge1", "id" => "idedge1")
          }
        }
      end
      
      puts test.to_xml
      

      输出:

      <?xml version="1.0"?>
      <map>
        <linking-phrase-list>
          <linking-phrase label="edge1" id="idedge1"/>
        </linking-phrase-list>
      </map>
      

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        相关资源
        最近更新 更多