我有一个现有的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"
我发现了很多很多类似的东西,包括嵌套构建器和使用<<操作符,但是无法将完整的XML节点树插入到构建块中。我怎样才能把这个字符串变成实节点呢?
您发现使用<<
存在哪些问题?
xml = Nokogiri::XML::Builder.new do |q|
q.query do |f|
f.name "awesome"
f << str
end
end
并避免使用私有insert
方法
和往常一样,我在发帖后不久就找到了答案…
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"
编辑:当<<不知什么原因失败了。然而,正如其他人所指出的那样,它通过直接访问:insert方法来工作,该方法旨在被保护。把它看作是"坏做法"和最后的手段。