如何使用Nokogiri创建名为comment的XML节点?
解决Nokogiri DSL无法创建名为
comment的节点问题 确实踩过这个坑!Nokogiri的XML DSL里comment是专门用来生成XML注释(<!-- ... -->)的内置方法,直接调用它只会生成注释而非元素节点。这里有几个实用的绕开方案:
方法1:手动创建节点并添加
直接调用文档的create_element方法生成指定名称的节点,再挂载到父节点上,完全避开DSL的命名冲突:
require 'nokogiri' # 初始化XML文档和根节点 doc = Nokogiri::XML::Document.new root = doc.create_element('root') doc.add_child(root) # 创建名为comment的元素节点并添加到根节点下 comment_node = doc.create_element('comment', '这是comment节点的内容') root.add_child(comment_node) puts doc.to_xml
运行后生成的XML:
<?xml version="1.0"?> <root> <comment>这是comment节点的内容</comment> </root>
方法2:直接传入节点字符串
如果喜欢简洁写法,可以直接给父节点添加字符串形式的节点,Nokogiri会自动解析为合法XML元素:
require 'nokogiri' doc = Nokogiri::XML::Document.new root = doc.create_element('root') doc.add_child(root) # 直接添加字符串格式的comment节点 root.add_child('<comment>这是另一个comment节点</comment>') puts doc.to_xml
方法3:用Builder的send方法指定节点名
要是习惯用Builder DSL,可以通过Ruby的send方法,以字符串形式传递节点名,避免触发内置的comment方法:
require 'nokogiri' builder = Nokogiri::XML::Builder.new do |xml| xml.root do # 用字符串指定节点名,绕开内置方法 xml.send('comment', 'Builder生成的comment节点') end end puts builder.to_xml
这三种方法都能顺利生成名为comment的元素节点,不会误生成XML注释。
内容的提问来源于stack exchange,提问作者zarathustra
相关产品推荐
相关产品推荐

