使用Nokogiri :: XML :: Builder附加元素

san*_*rom 5 ruby xml nokogiri

我有以下代码:

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.myRoot do |xml|
    xml.oneChild
    xml.anotherChild
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我想使用构建器将一些子节点附加到myRoot(第二步,我知道如何立即附加它们).我怎样才能做到这一点?

我试过这个:

node = builder.doc.xpath('//myRoot/oneChild').first
Nokogiri::XML::Builder.with(node) do |xml|
  xml.childOfOneChild 'Im a child of oneChild'
end
Run Code Online (Sandbox Code Playgroud)

哪个不起作用.他们不会坚持这个元素,它只是一个空的一个孩子.

mic*_*ael 16

您的代码生成以下XML,它似乎符合您的规范.oneChild无论如何,它不会产生空洞.如果这不是你想要的,你能告诉我们你理想的输出是什么吗?:

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.myRoot do |xml|
    xml.oneChild
    xml.anotherChild
  end
end

puts builder.to_xml

# <?xml version="1.0" encoding="UTF-8"?>
# <myRoot>
#   <oneChild/>
#   <anotherChild/>
# </myRoot>   

node = builder.doc.xpath('//myRoot/oneChild').first
Nokogiri::XML::Builder.with(node) do |xml|
  xml.childOfOneChild 'Im a child of oneChild'
end

puts builder.to_xml

# <?xml version="1.0" encoding="UTF-8"?>
# <myRoot>
#   <oneChild>
#     <childOfOneChild>Im a child of oneChild</childOfOneChild>
#   </oneChild>
#   <anotherChild/>
# </myRoot>
Run Code Online (Sandbox Code Playgroud)