如何向Nokogiri XML构建器添加属性?

3
这是我想要做的事情:
xml = Nokogiri::XML::Builder.new do |x|
  x.root do
    x.book do
      x.attribute('isbn', 12345) # Doesn't work!
      x.text("Don Quixot")
    end
  end
end.doc

我知道我可以执行x.book(isbn: 12345),但这不是我想要的。我想在do/end块中添加属性。这有可能吗?

期望的XML:

<root>
  <book isbn="12345">Don Quixot</book>
</root>

你能手动编写一些 XML 来展示你想要创建的内容吗? - Derek Wright
@ddubs刚刚更新了答案,请见上方。 - yegor256
1个回答

6
将属性添加到节点中,如下所示。
xml = Nokogiri::XML::Builder.new do |x|
  x.root do
    x.book(isbn: 1235) do
      x.text('Don Quixot')
    end
  end
end.doc

或者,重新阅读您的问题后,也许您想将其添加到 do 块中的父项。这种情况下,这个方法可行:

xml = Nokogiri::XML::Builder.new do |x|
  x.root do
    x.book do
      x.parent.set_attribute('isbn', 12345)
      x.text('Don Quixot')
    end
  end
end.doc

生成:

<?xml version="1.0"?>
<root>
  <book isbn="1235">Don Quixot</book>
</root>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接