模板規則經過使用模式來匹配文檔樹的節點。模式指定一組條件,用於選擇要處理的節點。
模式匹配的語法不光能夠在<xsl:template>元素的match屬性中使用,還能夠在<xsl:apply- templates>、<xsl:value-of>、<xsl:for-each>、<xsl:copy- of>、<xsl:sort>、<xsl:variable>和<xsl:param>元素的select屬 性中使用。
下面列出經常使用的模式匹配的用法:
一、匹配根節點
例如:<xsl:template match="/">,表示匹配根節點。
二、匹配元素節點
例如:<xsl:template match="employees">,表示匹配employees元素節點。
三、使用通配符
例如:<xsl:template match="*">,表示匹配任何元素。
四、使用@匹配屬性
用@加上數姓名,能夠用於匹配屬性節點。
例如:<xsl:template match="@mode">,表示匹配mode屬性節點。不過要注意的是,XSLT處理器在遍歷節點的樹狀結構時,並不處理屬性節點。若是要讓處 理器處理屬性節點,必須顯式調用<xsl:apply-templates>元素,並使用select屬性選擇屬性節點。
還能夠將@與星號(*)一塊兒使用,例如:<xsl:template match="@*">,表示匹配任意的屬性節點。
五、使用斜槓(/)匹配子節點
例如:<xsl:template match="employees/employee">,表示匹配employees元素節點下的任意的employee子節點。
六、使用雙斜槓(//)匹配後代節點
有時候,但願對某一類元素節點進行處理,而無論該節點在樹狀結構中所處的位置,就可使用雙斜槓(//)來匹配節點。例 如:<xsl:template match="//name">,表示匹配根節點下任意的name元素節點,而無論該節點所處的位置。例如:<xsl:template match="employees//name">,表示匹配employees元素節點下的任意的name元素節點。
七、使用或操做符(|)
使用或操做符(|)來可選擇地匹配多個節點。例如:<xsl:template match="name|age">,表示匹配任意的name或age元素節點。
八、使用[]操做符
能夠在[]中指定布爾表達式,用於在節點集中更精確地匹配某一個節點。
例如:若是隻想匹配第一個employee元素,能夠這樣寫:<xsl:template match="employee[1]">,表示匹配第一個employee子元素節點。這和上面的寫法是等價的:
<xsl:template match="employee[position()=1]">
position()是一個函數調用,返回節點在上下文中的當前位置,而後判斷該位置是否等於1.
九、使用node()匹配節點
node()表示匹配除屬性節點和根節點以外的其餘任何節點。
例如:<xsl:template match="node()">.
十、使用text()匹配文本節點
text()表示匹配任意的文本節點,例如:<xsl:template match="text()">。
十一、使用processing-instruction()匹配處理指令
processing-instruction()表示匹配任的處理指令節點。
例如:<xsl:tempate match="processing-instruction()">。processing-instruction()還能夠帶一個參數,用於指定處理指令目標的名字,這樣,只有和這個名字相同的處理指令才能被匹配。
十二、使用comment()匹配註釋
comment()表示匹配任意的註釋節點,例如:<xsl:template match="comment()">。
1三、使用id()進行匹配
一個ID類型的屬性惟一標識了XML文檔中的一個元素。
例如:<xsl:template match="id('E-2001320001')">表示匹配擁有ID類型屬性而且其值等於E-2001320001的元素。要注意的是,要讓 這種方式可以工做,必須在源XML文檔的DTD中聲明ID類型的屬性,能夠是內部的或外部的DTD,若是源文檔那個沒有DTD,則id()函數就不能正常 工做。