当前我正在使用从文档中删除窗帘节点
doc.search('//xpathExpression').each do |node|
node.remove
end
但是,我确实需要注释掉这些节点,而不是删除它们。有没有一种简单的方法可以更改节点类型/注释掉当前节点?
要在到期时给予信用,这是原始用户在上面的评论中建议的方法
执行以下操作以注释掉基于xpath的一个或多个给定节点:
- 使用
.xpath
方法查找目标节点 - 在每个重新编辑的节点之前,准备一个已转换为注释对象内字符串的节点副本
- 删除原始节点
例如,给定:
#!/usr/bin/env ruby
require "nokogiri"
xml = %{
<top>
<child num="1"/>
<child num="2"/>
</top>
}
doc = Nokogiri::XML(xml)
此代码将根据num="2"
属性注释掉第二个<child>
。
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)
在评论中似乎没有一个简单的自动漂亮打印的方法。虽然可能有办法解决这个问题,但如果你关心美学,请准备好花一些时间来处理它。