作者:林台育怡婷雅雯 | 来源:互联网 | 2023-05-23 17:02
如何添加Nokogiri::XML::Element
到正在创建的XML文档Nokogiri::XML::Buider
?
我目前的解决方案是序列化元素并使用该<<
方法让Builder重新解释它.
orig_doc = Nokogiri::XML('test')
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 <
# test
# hi
#
然而,这Nokogiri::XML::Element
是一个非常大的节点(以千字节和数千个节点的顺序),并且此代码处于热门路径中.分析表明序列化/解析往返非常昂贵.
如何指示Nokogiri Builder将现有XML元素添加node
到"当前"位置?
1> Phrogz..:
不使用私有方法,您可以使用实例的parent
方法Builder
获取当前父元素的句柄.然后你可以将一个元素附加到该元素(甚至从另一个文档).例如:
require 'nokogiri'
doc1 = Nokogiri.XML('success!')
a = doc1.at('a')
# note that `xml` is not a Nokogiri::XML::Document,
# but rather a Nokogiri::XML::Builder instance.
doc2 = Nokogiri::XML::Builder.new do |xml|
xml.some do
xml.more do
xml.parent <
#=>
#=>
#=> success!
#=>
#=>