【发布时间】:2015-04-03 00:20:28
【问题描述】:
如何将Nokogiri::XML::Element 添加到使用Nokogiri::XML::Buider 创建的XML 文档中?
我目前的解决方案是序列化元素并使用<< 方法让生成器重新解释它。
orig_doc = Nokogiri::XML('<root xmlns="foobar"><a>test</a></root>')
node = orig_doc.at('/*/*[1]')
puts Nokogiri::XML::Builder.new do |doc|
doc.another {
# FIXME: this is the round-trip I would like to avoid
xml_text = node.to_xml(:skip_instruct => true).to_s
doc << xml_text
doc.second("hi")
}
end.to_xml
# The expected result is
#
# <another>
# <a xmlns="foobar">test</a>
# <second>hi</second>
# </another>
但是Nokogiri::XML::Element 是一个相当大的节点(以千字节和数千个节点的顺序),并且此代码处于热路径中。分析表明,序列化/解析往返非常昂贵。
如何指示 Nokogiri Builder 在“当前”位置添加现有 XML 元素 node?
【问题讨论】: