目前我正在使用以下方式删除窗帘节点:
doc.search('//xpathExpression').each do |node|
node.remove
end
但是,我真的需要注释掉节点而不是删除节点。有没有一种简单的方法可以将节点类型/注释更改为当前节点?
答案 0 :(得分:0)
为了给予应有的信用,这是原始用户在上述评论中建议的方法。
执行以下操作以基于xpath注释掉一个或多个节点:
.xpath
方法查找目标节点。例如,给定:
#!/usr/bin/env ruby
require "nokogiri"
xml = %{
<top>
<child num="1"/>
<child num="2"/>
</top>
}
doc = Nokogiri::XML(xml)
此代码将根据<child>
属性注释掉第二个num="2"
。
doc.xpath("//top/child[@num='2']").each do |node|
node.add_previous_sibling( Nokogiri::XML::Comment.new(doc, " #{node.to_s} ") )
node.remove
end
在此过程之后,doc.to_xml
将是:
<?xml version="1.0"?>
<top>
<child num="1"/>
<!-- <child num="2"/> -->
</top>
其他信息:
Nokogiri发表的评论在<!--
和-->
令牌之间没有空格,也没有添加任何内容。上面的示例添加了前导和尾随空格。如果这不是问题,可以使用
Nokogiri::XML::Comment.new(doc, node.to_s)
在评论中似乎没有直接进行自动漂亮打印。虽然可能有办法绕过它,但是如果你关注美学,那就准备花一些时间来搞乱它。