騎士の圣殿

           

          什么是XSL

          XSL(EXtensible Stylesheet Language)它是指可擴展樣式表語言。 XSL之于 XML 就像 CSS 之于 HTML。說白了就是將XML中的數據用指定的顯示格式輸出.XML不像HTML,它不包含任何顯示格式的信息. XSL 包含兩個部分:
          • XSLT – 用于轉換 XML 文檔的語言. XSLT 是指 XSL 轉換 (XSL Transformation)
          • XPath – 用于在 XML 文檔中導航的語言

          XSL 語法

          任何 XSL 文檔的第一行實際上都是 XML 聲明:

          <?xml version="1.0" encoding="GB2312"?>

          XSL 與 XML ?遵循相同的語法規則
          在 XML 聲明之后,就是 XSL 聲明,例如:

          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
          ......
          </xsl:stylesheet>

          XSL聲明必須要有結束標簽,上面的聲明中還包含命名空間和 XSL 規范的版本。

          什么是命名空間

          它指定一組可以在特定文檔中使用的元素名稱和屬性名稱。命名空間的作用是避免命名沖突。由于 XML 和其它與 XML 相關的語言都是用戶定義的,所以可能出現命名沖突。<table>可能是指一個布局或是一個座位。由于大多數應用程序同時處理多個 XML 文檔,因此經常會有不同 XML 文檔相混合的情況,而在這些文檔中某個元素可能代表不同的含義。幾個文檔使用相同的命名空間可以確保元素在每個文檔中代表相同含義。否則,就應該使用不同的命名空間確保元素代表不同的含義。

          命名空間由文檔聲明中的 xmlns 屬性指定,實際上就是網站的地址(例如 http://www.w3.org/1999/XSL/Transform)。其基本原理是 URI 具有唯一性,因此相應的命名空間也是唯一的。文檔聲明中的 URI 僅用作名稱。

          模板或規則
          XSL 文檔是由模板或規則構成,每個模板定義應用于特定 XML 節點的規則。XSL 模板如下所示:

          <xsl:template match="/">......</xsl:template>

          模板的作用是用來承載XML文檔中的數據的,就像一個模具,如果這個模具是方形的,那么用這個模具做出來的模型也一定是方形的,而XML文檔中的數據就是用來真充模具的原料。實際上在模板中可以嵌套子模板,但最上層模板必須將match設為"/"。
          happyold.xml

          <?xml version="1.0" encoding="GB2312"?>
          <俱樂部>
          <會員>    
          <姓名>cnbruce </姓名>
          <年齡>10 </年齡>
          <性別>男 </性別>
          <描述>他是一個糟糕的家伙!</描述>
          </會員>
          <會員>
          <姓名>yufuzi</姓名>
          <年齡>80 </年齡>
          <性別>男 </性別>
          <描述>他是一個優秀的男人!</描述>
          </會員>
          <會員>
          <姓名>xiaojin</姓名>
          <年齡>20 </年齡>
          <性別>男 </性別>
          <描述>他人品有問題!</描述>
          </會員>
          </俱樂部>


          循環構造

          <xsl:for-each select="...">......</xsl:for-each>

          與典型的 for 循環作用相同。
          old.xsl

          <?xml version="1.0" encoding="GB2312"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
          <xsl:template match="/">
          <table border="1">
          <tr>
          <th>姓名</th>
          <th>年齡</th>
          <th>性別</th>
          <th>描述</th>
          </tr>
          <xsl:for-each select="俱樂部/會員">
          <tr>
          <!--表達式為何不需要包括父節點或從文檔根開始。這是因為這些元素的路徑是根據 <xsl:for-each> 構造中的 XPath 表達式來計算的-->
          <td><xsl:value-of select="姓名"/></td>
          <td><xsl:value-of select="年齡"/></td>
          <td><xsl:value-of select="性別"/></td>
          <td><xsl:value-of select="描述"/></td>
          </tr>
          </xsl:for-each>
          </table>
          </xsl:template>
          </xsl:stylesheet>

          將old.xsl與happyold.xml放到同一文件夾下,然后在happyold.xml第二行插隊入

          <?xml-stylesheet type="text/xsl" href="old.xsl"?>

          然后在瀏覽器中預覽一下顯示結果。

          使用循環構造,還可以根據條件過濾輸出。假設只想顯示會員中年齡大于30的會員。
          old30.xsl

          <?xml version="1.0" encoding="GB2312"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
          <xsl:template match="/">
          <table border="1">
          <tr>
          <th>姓名</th>
          <th>年齡</th>
          <th>性別</th>
          <th>描述</th>
          </tr>
          <xsl:for-each select="俱樂部/會員[年齡>30]">
          <tr>
          <td><xsl:value-of select="姓名"/></td>
          <td><xsl:value-of select="年齡"/></td>
          <td><xsl:value-of select="性別"/></td>
          <td><xsl:value-of select="描述"/></td>
          </tr>
          </xsl:for-each>
          </table>
          </xsl:template>
          </xsl:stylesheet>

          要定義 XML 節點的條件,可以使用下列任何運算符:

          等于 (=)
          不等于 (!=)
          小于 (<)
          小于或等于 (<=)
          大于 (>)
          大于或等于 (>=)


          使用<xsl:sort / >構造使輸出的結果按指定的節點進行排序,<xsl:sort /> 元素必須嵌套在 <xsl:for-each > 元素中,以確保應用程序可以循環通過所有的項目。sort 元素沒有相應的結束標簽,所以在其結尾加上"/"使其自結束。
          old_sort.xsl

          <?xml version="1.0" encoding="GB2312"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
          <xsl:template match="/">
          <table border="1">
          <tr>
          <th>姓名</th>
          <th>年齡</th>
          <th>性別</th>
          <th>描述</th>
          </tr>
          <xsl:for-each select="俱樂部/會員">
          <xsl:sort select="年齡" order="descending"/>
          <tr>
          <td><xsl:value-of select="姓名"/></td>
          <td><xsl:value-of select="年齡"/></td>
          <td><xsl:value-of select="性別"/></td>
          <td><xsl:value-of select="描述"/></td>
          </tr>
          </xsl:for-each>
          </table>
          </xsl:template>
          </xsl:stylesheet>

          去掉order="descending"再看看顯示結果。

          條件構造:

          <xsl:choose>
          <xsl:when test="表達式">

          </xsl:when>
          <xsl:otherwise>

          </xsl:otherwise>
          </xsl:choose>

          條件構造中可以有多個when,但只能有一個otherwise,用于處理未包括在初始測試條件中的所有其它情況.
          old_choose.xsl

          <?xml version="1.0" encoding="GB2312"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
          <xsl:template match="/">
          <table border="1">
          <tr>
          <th>姓名</th>
          <th>年齡</th>
          <th>性別</th>
          <th>描述</th>
          </tr>
          <xsl:for-each select="俱樂部/會員">
          <xsl:choose>
          <xsl:when test="年齡 > 70">
          <tr bgcolor="#66CCFF">
          <td><xsl:value-of select="姓名"/></td>
          <td><xsl:value-of select="年齡"/></td>
          <td><xsl:value-of select="性別"/></td>
          <td><xsl:value-of select="描述"/></td>
          </tr>
          </xsl:when>
          <xsl:when test="年齡=10">
          <tr bgcolor="blue">
          <td><xsl:value-of select="姓名"/></td>
          <td><xsl:value-of select="年齡"/></td>
          <td><xsl:value-of select="性別"/></td>
          <td><xsl:value-of select="描述"/></td>
          </tr>
          </xsl:when>
          <xsl:otherwise>
          <tr bgcolor="red">
          <td><xsl:value-of select="姓名"/></td>
          <td><xsl:value-of select="年齡"/></td>
          <td><xsl:value-of select="性別"/></td>
          <td><xsl:value-of select="描述"/></td>
          </tr>
          </xsl:otherwise>
          </xsl:choose>
          </xsl:for-each>
          </table>
          </xsl:template>
          </xsl:stylesheet>

          posted on 2007-11-19 10:23 最後の騎士 閱讀(223) 評論(0)  編輯  收藏 所屬分類: xml


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 扶风县| 黎平县| 阳泉市| 汝南县| 洛扎县| 张家口市| 永胜县| 兰坪| 当涂县| 江西省| 宁都县| 虞城县| 茂名市| 吉木萨尔县| 洪洞县| 江源县| 行唐县| 隆德县| 阿合奇县| 霍山县| 自治县| 云梦县| 保定市| 大关县| 深圳市| 克东县| 固安县| 高要市| 南汇区| 府谷县| 浮山县| 蒙山县| 锡林浩特市| 云浮市| 库伦旗| 平泉县| 辽阳县| 汪清县| 宁津县| 汨罗市| 文山县|