我有一个现有的Nokogiri构建器和一些来自不同来源的字符串中的xml节点。如何将此字符串添加到构建器中?
str = "<options><cc>true</cc></options>"
xml = Nokogiri::XML::Builder.new do |q|
q.query do |f|
f.name "awesome"
f.filter str
end
end
这可以将str转换为类似:
xml.to_xml
=> "<?xml version=\"1.0\"?>\n<query>\n <name>awesome</name>\n <filter><options><cc>true</cc></options></filter>\n</query>\n"
我发现了许多类似的东西,包括嵌套构建器和使用&lt;&lt;运算符,但无法将完整的xml节点树插入构建器块。 如何将该字符串转换为真实节点?
答案 0 :(得分:11)
您使用<<
发现了哪些问题?这对我有用:
xml = Nokogiri::XML::Builder.new do |q|
q.query do |f|
f.name "awesome"
f << str
end
end
并避免使用私有insert
方法。
答案 1 :(得分:0)
而且,像往常一样,我在发布后不久就找到了答案......
xml = Nokogiri::XML::Builder.new do |q|
q.query do |f|
f.name "awesome"
f.__send__ :insert, Nokogiri::XML::DocumentFragment.parse( str )
end
end.to_xml
给你
=> "<?xml version=\"1.0\"?>\n<query>\n <name>awesome</name>\n <options>\n <cc>true</cc>\n </options>\n</query>\n"
编辑:这种方式适用于我&lt;&lt;因某种未知原因失败了。但是,正如其他人指出的那样,它通过直接访问旨在保护的:insert方法来工作。将其视为“不良做法”和最后的手段。