使用像这样的xslt样式表。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="no"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/property/map/entry[@key='/mycompany/abc']"/>
<xsl:template match="/property/map/entry[@key='/mycompany/pqr']"/>
</xsl:stylesheet>
然后通过shell脚本使用xsltproc xsl处理器。
$ xsltproc fix.xslt document.xml
which will give you:
<?xml version="1.0"?>
<property name="myData">
<entry key="/mycompany/xyz">
<value>Sara</value>
</entry>
</property>
如果你真的需要这些节点被注释出来,那么我的xslt-foo就不够强大--你可能需要<xsl:comment>
。
编辑:用awk解决。
awk '/<entry key="\/mycompany\/(abc|pqr)">/,/<\/entry>/ {p=1}; /.*/{ if(p==0) {print;}; p=0 }' blah.xml
Result:
<property name="myData">
<entry key="/mycompany/xyz">
<value>Sara</value>
</entry>
</property>
请注意,awk版本在嵌套的标签下将无法正常工作。
-nick