我想匹配我的xml中除了一个ie docbody之外的所有节点。像xslt匹配除特定节点以外的所有节点
<xsl:template match="@*|node()[not(docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>
我如何实现这一点,我试过上面的方式。
我想匹配我的xml中除了一个ie docbody之外的所有节点。像xslt匹配除特定节点以外的所有节点
<xsl:template match="@*|node()[not(docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>
我如何实现这一点,我试过上面的方式。
匹配所有,但这个(添加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>
要排除注释,XPath是否会成为@ @ |节点()[not(self :: comment())]'或'@ * | node()[not(// comment())]'分别表示? – CoDEmanX 2014-01-06 18:13:11
是的,你只需要做到这一点:
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>
你的匹配条件说“不具有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节点的方法“尽管您应该只使用两个模板” – 2013-03-20 14:14:01
问题是什么? – kamituel 2013-03-20 13:58:52
我试图以这种方式排除节点,它不工作,是否有一种排除匹配 – luckyluke 2013-03-20 14:05:40