使用nokogiri将xml节点附加到文档

时间:2014-09-12 18:47:06

标签: ruby-on-rails

我想将一个节点附加到文档,但是作为body节点的子节点。当我使用<<或推,它只是在身体节点之后添加节点,而不是它的子节点:

xml = zip.read("word/document.xml")
doc = Nokogiri::XML(xml) {|x| x.noent}
body = doc.xpath("//w:body")
node = Nokogiri::XML::Node.new("<w:p w14:paraId=\"322D15A5\" w14:textId=\"3D86357C\" w:rsidR=\"00E1538A\" w:rsidRDefault=\"002D3A2C\">Hello World\n</w:p>",doc)
body << node

如何将节点添加为正文的子节点而不是兄弟节点?

1 个答案:

答案 0 :(得分:1)

我明白了。 body是Nokogiri :: XML :: NodeSet容器。可以直观地认为你会将其附加到那个,但这并不起作用。当你达到更深层次时,你会得到身体元素:

> body.first.class
=> Nokogiri::XML::Element 

为了更好或更好,通过将新节点附加到该主体节点:

body.first << node

您可以获得所需的嵌套结果。