2013-06-20 121 views

回答

8

@*任何屬性節點匹配,並且匹配node()任何其它種類的節點(元素,文本節點,處理指令或註釋)的。因此,與@*|node()匹配的模板將應用於任何未被更具體模板使用的節點。

這種情況最常見的例子是身份模板

<xsl:template match="@*|node()"> 
    <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy> 
</xsl:template> 

其複製XML輸入到輸出樹一字不差。然後,您可以使用適用於特定節點的更具體的模板覆蓋此模板,以對XML進行小調整,例如,此樣式表將創建與輸入相同的輸出XML,但所有foo元素的名稱都已更改爲bar

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="@*|node()"> 
    <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy> 
    </xsl:template> 

    <xsl:template match="foo"> 
    <bar><xsl:apply-templates select="@*|node()" /></bar> 
    </xsl:template> 
</xsl:stylesheet> 
+0

謝謝你的詳細解答,現在即時通訊清楚:) – sajay

+1

順便說一句,原因'節點()'不包括的屬性在XPath數據模型的屬性是從不同的_axis_其他節點類型,並且不被視爲其包含元素的子節點。完全展開的'@ * | node()'的longhand相當於'attribute :: * | child :: * | child :: text()| child :: processing-instruction()| child :: comment()' 。 –