需要在 Builder 函数名称中使用连字符

发布于 2024-11-07 17:44:28 字数 515 浏览 3 评论 0原文

我正在尝试使用 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 我的意思是当我不使用该功能时。

I'm trying to use Builder to build up a xml document for project I am working on. The xml has a very strict structure so I can't change it.
The problem I am running into is this. I am trying to add a child to a node "linking-phrase-list"
The name of the child must be "linking-phrase". So in order to do this I would call:

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

Of course then ruby interprets this as (xml.linking)-phrase() which is not at all what I want. So I need to know if there is some way I can convince ruby that is one function call not two? That or tell nokogiri that I mean that when I'm not using that function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阿楠 2024-11-14 17:44:28

为此,请使用构建器提供的 tag! 方法。

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

Use the tag! method provided by builder for exactly this purpose.

test = Builder.new do |xml|
  xml.map {
    xml.tag!("linking-phrase-list") {
      xml.tag!("linking-phrase", "label" => "edge1", "id" => "idedge1")
    }
  }
end
风为裳 2024-11-14 17:44:28

因此,您的问题已经有了答案,请使用 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>

So, you have the answer in your question, use send method:

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

output:

<?xml version="1.0"?>
<map>
  <linking-phrase-list>
    <linking-phrase label="edge1" id="idedge1"/>
  </linking-phrase-list>
</map>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文