例子已經放在上面,下面我們可以來仔細的分析其中的語法結果和關鍵所在:
首先注意到的是,XSL文件本身即是一份 XML文件,所以在XSL文件的開頭,一樣有和XML文件相同的聲明。W3C這個XML的標准機構為XSL定義了很多標記(元素),XSL文件就是這些標記和HTML標記的組合。在XSL文件中,必須有如下一行的代碼:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
這裡,xsl:stylesheet是XSL文件的根元素,在根元素中包含了所有的排版樣式,樣式表就是由這些排版樣式組合成的;xmlns:xsl="http://www.w3.org/TR/WD-xsl"這一句主要用來說明該XSL樣式表是使用W3C所制定的XSL,設定值就是XSL規范所在的URL地址。
實際上,這裡"http://www.w3.org/TR/WD-xsl"就是一個名字空間(namespace),我們在上面關於XML Schema語法介紹的時候已經進行過介紹。這是一個標准的名字空間。"stylesheet","template","for-each"等等關鍵字都是這個名字空間所定義的。
當然在xsl:stylesheet還可以設定其他的屬性,其他的屬性有:
1. default-space:決定是否保留XML文件中的空白,僅當值為"default"時保留。
2. indent-result:決定是否保留XSL文件中的空白,值為"yes"時保留。
3. language:設定在XSL文件中使用的腳本語言。
然後,我們在上面的代碼中看到有如下的代碼:
<xsl:template match="/">
………
</xsl:template>
這裡實際上是表示了XSL解析器對XML文檔的處理過程,它從根節點(由match="/"決定,這裡"/"就表示根節點)開始,對XML文檔進行遍歷,並根據具體的代碼從XML文檔中取出相關的內容。這裡關於屬性match的取值是一個比較復雜的問題。它實際上表示的含義是從XML文檔中取出一個特定的節點集合(XML文檔可以被看成一個樹的結構,這個在後面關於XML解析器分析中有詳細的介紹)。這裡,我們通過幾個簡單的例子來說明屬性match的取值。
比如下面一行代碼:
<xsl:template match="/">
這行代碼的意思是告訴XSL解析程序,當前需要處理的節點是根節點下的內容(用"/"來表示根節點),其實這裡的match值內容的編寫是要符合XPath的語意。關於XPath我們在後面的章節中會進行詳細的介紹。
再舉一個例子:
<xsl:template match="shoppingcart/item">
這行代碼要匹配的是shoppingcart元素下的item元素。而不管shoppingcart在XML文檔結構樹下的哪一個位置。比如XML文檔的其中一段是這樣的。
<shoppingcart>
<item>
<itemNo>3333</itemNo>
<itemName>屠龍刀</itemName>
</item>
<item>
<itemNo>4444</itemNo>
<itemName>離別鉤</itemName>
</item>
</shoppingcart>
那麼它匹配的內容就是
<item>
<itemNo>3333</itemNo>
<itemName>屠龍刀</itemName>
</item>
<item>
<itemNo>4444</itemNo>
<itemName>離別鉤</itemName>
</item>
而下面這個例子:
<xsl:template match="/shoppingcart/item">
表示只匹配XML文檔根節點下的shoppingcart這個節點下的所有item元素。也就是說如果shoppingcart不是直接在根節點下的,它就不符合這個匹配條件。
再看一個例子:
<xsl:template match="price[@unit='USD']">
這個例子