我想匹配我的xml中的所有节点,除了一个即docbody。就像是
<xsl:template match="@*|node()[not(docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>
我如何实现这一点,我尝试了上面的方法。
Match all but this one (adding self::
) and overwrite the default template for docBody
(without it the contents of docBody
would still be printed):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- overwrite the default template -->
<xsl:template match="docBody">
</xsl:template>
</xsl:stylesheet>
您的匹配条件说“任何没有docBody
元素子节点的节点”,这与不是docBody
元素本身不同。你要这个:
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
尽管您应该只使用两个模板:
<xsl:template match="docBody"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
是的,您只需要这样做:
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>