使用以下xml和xslt我想根据特定的数学和条件删除特定的片段。
XML
<root>
<component>.....</component>
<table>
<entry>
<extra>....</extra>
<reference value="#MED_0"/>
</entry>
<entry>
<extra>....</extra>
<reference value="#MED_1"/>
</entry>
</table>
</root>
XSLT
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template name="remove" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[name()='entry']">
<xsl:if test="@value='#MED_0'">
<xsl:call-template name="remove"/>
</xsl:if>
</xsl:template>
当前结果
<root>
<component>.....</component>
<table>
</table>
</root>
预期
<root>
<component>.....</component>
<table>
<entry>
<extra>....</extra>
<reference value="#MED_1"/>
</entry>
</table>
</root>
当我们使用XSLT版本1.0执行它时,它会删除所有条目,但我们只想删除所有条目,其值为“#MED_0”而不是值=“#MET_1”
任何想法?
答案 0 :(得分:0)
您可以通过将元素与空模板匹配来删除元素:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="entry[reference[@value='#MED_0']]"/>
</xsl:stylesheet>