【发布时间】:2013-08-06 13:43:34
【问题描述】:
我想学习如何在 xml 文件中搜索一个单词并使用 xslt 删除整行
示例: abc.xml
<server>
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="abc.props:type=Service,name=abcprop">
<attribute name="Properties">
abc.def.ghi=123
ghi.klm.nop=123
qrst.tuv.wxy=123
zab.cde.fgh=123
ijk.lmn.opq=remove
rst.uvw.xyz=123
abc.tuv.nop=123
ajc.dzf.goi=123
</attribute>
</mbean>
</server>
从上面的例子中我想搜索一个单词“remove”并删除整行:ijk.lmn.opq=remove
预期输出是:
<server>
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="abc.props:type=Service,name=abcprop">
<attribute name="Properties">
abc.def.ghi=123
ghi.klm.nop=123
qrst.tuv.wxy=123
zab.cde.fgh=123
rst.uvw.xyz=123
abc.tuv.nop=123
ajc.dzf.goi=123
</attribute>
</mbean>
</server>
更新:
我尝试了以下代码
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[(@* != 'DELETE')]"/>
</xsl:stylesheet>
它是如何不工作的,它会删除 xml 文件中的所有内容并显示一个空文件。
【问题讨论】:
-
在 XML 文件中,行是由换行符分隔的,还是每行都在一个元素中?
-
我不确定换行符是什么,但每一行都是独立的,如果我删除一行,就不会有任何空行。
-
这里的问题是您的 xml 文件实际上不是 xml 文件。您确定文件实际上是您向我们展示的那样,还是包含在元素中的文本,例如
<text>...</text>? -
对不起,我更新了完整的文件。
标签: xml xslt xslt-1.0 xslt-2.0 saxon