问题
I have the following code:
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.myRoot do |xml|
xml.oneChild
xml.anotherChild
end
end
Now I want to append a few child nodes to myRoot using the builder (in a second step, I know how to append them straight away). How can I do that?
I've tried this:
node = builder.doc.xpath('//myRoot/oneChild').first
Nokogiri::XML::Builder.with(node) do |xml|
xml.childOfOneChild 'Im a child of oneChild'
end
Which doesn't work. They won't stick to the element, it's just an empty oneChild.
回答1:
Your code produces the following XML, which seems to meet your specifications. It doesn't produce an empty oneChild
, at any rate. If this isn't what you're looking for, can you tell us what your ideal output would be?:
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>
来源:https://stackoverflow.com/questions/5596210/append-elements-using-nokogirixmlbuilder