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

时间:2017-08-30 16:53:33

标签: ruby nokogiri

这就是我要做的事情:

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>

1 个答案:

答案 0 :(得分:3)

将属性添加到节点中,如下所示

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>