如果子元素 fiel1 和 field2 都不存在或为空,我需要删除 xml 元素。 输入和预期结果(见评论)
<root><!-- document -->
<element><!-- keep -->
<field1>A</field1>
</element>
<element><!-- keep -->
<field2>B</field2>
</element>
<element><!-- delete -->
<field1/>
</element>
<element><!-- delete></element>
<element/><!-- delete -->
</root>
非工作 Xsl(需要 v.1)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="node()"/>
</xsl:template>
<xsl:template match="element">
<xsl:choose>
<xsl:when test="field1 or field2">
<xsl:copy>
<xsl:copy-of select="node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
有人可以帮忙吗? 谢谢
解决此类问题的常见方法是按规则复制所有内容原样,并使用空模板为要删除的节点设置例外:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element[not(field1/text() or field2/text())]"/>
</xsl:stylesheet>