Nokogiri:non-destructively 打印没有其 children 的节点
Nokogiri: non-destructively print node without its children
我有一段 ruby 代码来替换属性的值:
# -*- coding: utf-8 -*-
require "nokogiri"
xml = <<-eos
<a blubb="blah">
<b>irrelevant</b>
<b>also irrelevant</b>
<b blubb="blah">
<c>irrelevant</c>
<c>irrelevant</c>
</b>
<b blubb="foo">
<c>irrelevant</c>
<c>irrelevant</c>
</b>
</a>
eos
doc = Nokogiri::XML(xml) { |config| config.noent }
doc.xpath("//*[@blubb='blah']").each {|node|
puts "Node before:\n#{node.to_s}" ## replace me!
node['blubb'] = "NEW"
puts "Node after:\n#{node.to_s}" ## replace me!
}
当我执行此代码时,我打印了整个 node
元素,但我只需要查看开始标记即可确认我的脚本是否正常工作。有没有办法只显示 node
的开始标记,或者至少只显示没有 child 节点的元素本身?重要的是节点本身在打印时不会改变(除了属性中的替换),所以删除 children 不是一个选项!
我们可以打印节点的name
和attribute_nodes
doc.xpath("//*[@blubb='blah']").each {|node|
puts "Node before:\n #{node.name} "+node.attribute_nodes.reduce('') { |out, n| out+="#{n.name}=#{n.value}'"}
node['blubb'] = "NEW"
puts "Node after:\n #{node.name} "+node.attribute_nodes.reduce('') { |out, n| out+="#{n.name}='#{n.value}'"}
}
我有一段 ruby 代码来替换属性的值:
# -*- coding: utf-8 -*-
require "nokogiri"
xml = <<-eos
<a blubb="blah">
<b>irrelevant</b>
<b>also irrelevant</b>
<b blubb="blah">
<c>irrelevant</c>
<c>irrelevant</c>
</b>
<b blubb="foo">
<c>irrelevant</c>
<c>irrelevant</c>
</b>
</a>
eos
doc = Nokogiri::XML(xml) { |config| config.noent }
doc.xpath("//*[@blubb='blah']").each {|node|
puts "Node before:\n#{node.to_s}" ## replace me!
node['blubb'] = "NEW"
puts "Node after:\n#{node.to_s}" ## replace me!
}
当我执行此代码时,我打印了整个 node
元素,但我只需要查看开始标记即可确认我的脚本是否正常工作。有没有办法只显示 node
的开始标记,或者至少只显示没有 child 节点的元素本身?重要的是节点本身在打印时不会改变(除了属性中的替换),所以删除 children 不是一个选项!
我们可以打印节点的name
和attribute_nodes
doc.xpath("//*[@blubb='blah']").each {|node|
puts "Node before:\n #{node.name} "+node.attribute_nodes.reduce('') { |out, n| out+="#{n.name}=#{n.value}'"}
node['blubb'] = "NEW"
puts "Node after:\n #{node.name} "+node.attribute_nodes.reduce('') { |out, n| out+="#{n.name}='#{n.value}'"}
}