我想匹配我的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