我想匹配我的xml中的所有节点,除了一个即docbody。像
这样的东西<xsl:template match="@*|node()[not(docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>
我如何实现这一目标,我尝试了上述方法。
答案 0 :(得分:4)
您的匹配条件是“任何没有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>
答案 1 :(得分:3)
匹配除此之外的所有内容(添加self::
)并覆盖docBody
的默认模板(如果没有,docBody
的内容仍会打印):
<?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>
答案 2 :(得分:0)
是的,你只需要这样做:
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>