2013-03-20 117 views
1

我想匹配我的xml中除了一個ie docbody之外的所有節點。像xslt匹配除特定節點以外的所有節點

<xsl:template match="@*|node()[not(docBody)]" name="identity"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()"> 
</xsl:copy> 
</xsl:template> 

我如何實現這一點,我試過上面的方式。

+0

問題是什麼? – kamituel 2013-03-20 13:58:52

+0

我試圖以這種方式排除節點,它不工作,是否有一種排除匹配 – luckyluke 2013-03-20 14:05:40

回答

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> 
+0

要排除註釋,XPath是否會成爲@ @ |節點()[not(self :: comment())]'或'@ * | node()[not(// comment())]'分別表示? – CoDEmanX 2014-01-06 18:13:11

0

是的,你只需要做到這一點:

<xsl:template match="@*|node()[not(self::docBody)]" name="identity"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"> 
    </xsl:copy> 
</xsl:template> 
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> 
+0

+1節點的方法「儘管您應該只使用兩個模板」 – 2013-03-20 14:14:01

相關問題