如何删除评论节点?

时间:2013-06-23 16:35:42

标签: ruby xml nokogiri

我有一个XML文档,其中包含许多我想取消注释的注释标记。例如:

<bean id="metadata" class="org.archive.modules.CrawlMetadata" autowire="byName">
   <!-- <property name="robotsPolicyName" value="obey"/> -->
   <!-- <property name="operator" value=""/> -->
   <!-- <property name="operatorFrom" value=""/> -->
   <!-- <property name="organization" value=""/> -->
   <!-- <property name="audience" value=""/> -->
</bean>

我正在使用Nokogiri。有没有办法删除节点上的注释,或者找到它们,即使作为注释,删除和重新创建?

1 个答案:

答案 0 :(得分:4)

看起来您想要将评论替换为其内容,因此取消注释标记?

这很容易做到:

require 'nokogiri'

doc = Nokogiri::XML::Document.parse(<<__XML__)
<bean id="metadata" class="org.archive.modules.CrawlMetadata" autowire="byName">
<!-- <property name="robotsPolicyName" value="obey"/> -->
<!-- <property name="operator" value=""/> -->
<!-- <property name="operatorFrom" value=""/> -->
<!-- <property name="organization" value=""/> -->
<!-- <property name="audience" value=""/> -->
</bean>
__XML__

doc.xpath('//comment()').each { |comment| comment.replace(comment.text) }

puts doc.serialize

<强>输出

<?xml version="1.0"?>
<bean id="metadata" class="org.archive.modules.CrawlMetadata" autowire="byName">
 <property name="robotsPolicyName" value="obey"/> 
 <property name="operator" value=""/> 
 <property name="operatorFrom" value=""/> 
 <property name="organization" value=""/> 
 <property name="audience" value=""/> 
</bean>