注释掉Nokogiri XML中的节点



当前我正在使用从文档中删除窗帘节点

doc.search('//xpathExpression').each do |node|
node.remove
end

但是,我确实需要注释掉这些节点,而不是删除它们。有没有一种简单的方法可以更改节点类型/注释掉当前节点?

要在到期时给予信用,这是原始用户在上面的评论中建议的方法


执行以下操作以注释掉基于xpath的一个或多个给定节点:

  1. 使用.xpath方法查找目标节点
  2. 在每个重新编辑的节点之前,准备一个已转换为注释对象内字符串的节点副本
  3. 删除原始节点

例如,给定:

#!/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)
    
  • 在评论中似乎没有一个简单的自动漂亮打印的方法。虽然可能有办法解决这个问题,但如果你关心美学,请准备好花一些时间来处理它。

相关内容

  • 没有找到相关文章

最新更新