<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 61,  comments - 2033,  trackbacks - 0

    什么是 XSL?在什么情況下應該使用它?

    XSL 之于 XML 就像 CSS 之于 HTML。它是指可擴展樣式表語言 (EXtensible Stylesheet Language)。這是一種用于以可讀格式呈現 XML 數據的語言。XSL 實際上包含兩個部分:

    • XSLT – 用于轉換 XML 文檔的語言
    • XPath – 用于在 XML 文檔中導航的語言

    XSLT 是指 XSL 轉換 (XSL Transformation),它是 XSL 最重要的部分。

    XSLT 可以將 XML 文檔轉換為其它 XML 文檔、XHTML 輸出或簡單的文本。這通常是通過將每個 XML 元素轉換為 HTML 元素來完成的。由于 XML 標簽是用戶定義的,瀏覽器不知道如何解釋或呈現每個標簽,因此必須使用 XSL。XML 標簽的意義是為了方便用戶(而不是計算機)理解。

    XSLT 還可以對 XML 樹進行下列操作:

    • 添加和刪除元素
    • 添加和刪除屬性
    • 對元素進行重新排列或排序
    • 隱藏或顯示某些元素
    • 查找或選擇特定元素

     

    XSL 是否與 XML 相同?

    既是又不是。說是,是因為它們遵循相同的語法規則(只有少許差異,下面我將會講到)。說不是,是因為它們的用途不同:XML 用于承載數據,而 XSL 則用于設置數據的格式。XSL 聲明與 XML 聲明的不同之處在于,XML 聲明只寫一行,而且沒有結束標簽,而 XSL 聲明必須包含結束標簽。

    在什么情況下應該使用 XSL?

    XSL 在設計時有幾個目標用途,這些用途使它成為某些開發情況下的完美解決方案,而對另一些開發情況則毫無用處。

    • XSL 專門用于處理 XML 文檔,并且遵循 XML 語法。因此,它只能在支持 XML 的應用程序中與 XML 結合使用。最合適使用 XML 和 XSL 的情況是:Web 門戶、新聞聚合器、社區網站或其它任何需要向各種設備及大量客戶端提供信息的 Web 應用程序。
    • XSLT 是一種基于模式匹配的語言。它會查找匹配特定條件的節點,然后應用相應的規則。因此,它不具備大多數編程語言的計算能力。例如,XSL 無法在運行時更改變量的值。它不應該用于從使用復雜公式的動態數據源(例如在線商店)來計算值。Web 編程語言更適于此用途。
    • XSL 不能代替或補充 CSS。它不應(也不能)用于設置 HTML 的樣式。但是,您可以將其用于需要頻繁重新設計可視化效果、頻繁更換布局以及以靈活格式處理數據的網站。
    • XSL 不是內容管理工具。它不應(也不能)用于更改 XML 文檔的內容或者編輯信息。但是,您可以將 XML 和 XSL 用于需要處理幾種不同格式文檔的內容管理系統。

    服務器端與客戶端

    服務器端轉換工作流程如下圖所示:o_fig01.gif

    客戶端 XSL 轉換的工作流程:
    o_fig02.gif


    什么是 XPath?

    XSL 使用 XPath 來標識 XML 樹中需要處理的各個元素。

    XPath 規范基本上遵循與文件系統尋址相同的規則:

    • 如果 XPath 表達式以斜杠 (/) 開頭,代表的是 XML 元素的絕對路徑(從 XML 文檔的根開始)。
    • 如果 XPath 表達式以雙斜杠 (//) 開頭,則會選擇當前文檔中符合指定條件的所有元素,而不考慮它們在 XML 文檔中的位置。例如,//employee 會查找 XML 文檔中的所有員工節點。
    • 星號 (*) 會選擇由前面的路徑定位的所有 XML 元素。例如,/company/department/* 選擇一個部門的所有子節點,即該部門的所有員工。
    • 點 (.) 選擇當前的節點,兩個點 (..) 選擇父節點。例如,用于選擇某個員工所在的部門的 XPath 表達式就是 ../employee
    • 要選擇屬性,請使用 @ 字符。例如,/company/department/employee[@retired] 選擇指定了 retired 屬性的所有員工。

    過濾項目

    使用 <xsl:for-each> 構造,您還可以根據條件過濾輸出。假設您只想顯示雇員中的程序員。

    <xsl:template match="/">
    <table border="1">
    <tr>
    <th>Name</th>
    <th>Job</th>
    <th>Salary</th>
    </tr>
    <xsl:for-each select="company/department/employee[job='Programmer']">
    <tr>
    <td><xsl:value-of select="name"/></td>
    <td><xsl:value-of select="job"/></td>
    <td><xsl:value-of select="salary"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </xsl:template>
    

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

    • 等于 (=)
    • 不等于 (!=)例如,name!='Ben Walker'
    • 小于 (<)例如,salary<2750
    • 小于或等于 (<=)
    • 大于 (>)
    • 大于或等于 (>=)

    對項目進行排序

    可以將項目按字母順序排列。只需使用 <xsl:sort /> 構造,并指定按哪個節點進行排序。<xsl:sort /> 元素必須嵌套在 <xsl:for-each> 元素中,以確保應用程序可以循環通過所有的項目。使用下面的代碼可以按字母順序顯示員工:

    <xsl:template match="/">
    <table border="1">
    <tr>
    <th>Name</th>
    <th>Job</th>
    <th>Salary</th>
    </tr>
    <xsl:for-each select="company/department/employee">
    <xsl:sort select="name" />
    <tr>
    <td><xsl:value-of select="name"/></td>
    <td><xsl:value-of select="job"/></td>
    <td><xsl:value-of select="salary"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </xsl:template>
    

    當然,您只需在 <xsl:sort /> 元素中額外添加一個屬性,即可方便地在升序和降序排列順序之間切換:

    <xsl:sort select="/name" order="descending"/>

    單一條件和多個條件

    在大多數語言中,XSL 還能夠根據條件顯示內容。

    單一條件是使用下面的語法定義的:

    <xsl:if test="表達式">
    </xsl:if>

    要對多個項目運行條件測試,以便只顯示滿足該條件的項目,需要將 xsl:if 構造嵌套在 xsl:for-each 元素中。下面的示例顯示了如何只列出薪金高于 2700 元的員工:

    <xsl:template match="/">
    <table border="1">
    <tr>
    <th>Name</th>
    <th>Job</th>
    <th>Salary</th>
    </tr>
    <xsl:for-each select="company/department/employee">
    <xsl:if test="salary &gt; 2700">
    <tr>
    <td><xsl:value-of select="name"/></td>
    <td><xsl:value-of select="job"/></td>
    <td><xsl:value-of select="salary"/></td>
    </tr>
    </xsl:if>
    </xsl:for-each>
    </table>
    </xsl:template>
    

    請注意,小于 (<) 和大于 (>) 符號由它們相應的 HTML 轉義序列(&lt 和 &gt)代替。否則,它們很容易與標簽的開頭和結尾混淆。   

    在測試表達式中可以使用常用的條件運算符:

    • &lt(小于)
    • &gt(大于)
    • =(等于)
    • !=(不等于)

    如果需要將某個值與某個字符串進行比較,則要將字符串放在單引號中(例如 <xsl:if test="job = 'Software Analyst'">)。

    象大多數編程語言中的 IF-ELSE 構造一樣,您還可以定義更復雜的條件。所使用的語法一看就能明白:

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

    為了在多個 XML 節點上測試條件,<xsl:choose> 構造必須嵌套在 <xsl:for-each> 循環中。

    假設您要以綠色高亮顯示薪金低于 2700 元的所有員工,以藍色高亮顯示薪金高于 2700 元的所有員工:

    <xsl:template match="/">
    <table border="1">
    <tr>
    <th>Name</th>
    <th>Job</th>
    <th>Salary</th>
    </tr>
    <xsl:for-each select="company/department/employee">
    <xsl:choose>
    <xsl:when test="salary > 2700">
    <tr bgcolor="#66CCFF">
    <td><xsl:value-of select="name"/></td>
    <td><xsl:value-of select="job"/></td>
    <td><xsl:value-of select="salary"/></td>
    </tr>
    </xsl:when>
    <xsl:otherwise>
    <tr bgcolor="#00CC99">
    <td><xsl:value-of select="name"/></td>
    <td><xsl:value-of select="job"/></td>
    <td><xsl:value-of select="salary"/></td>
    </tr>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:for-each>
    </table>
    </xsl:template>
    

    <xsl:otherwise> 元素指定的是當 XML 節點不滿足初始測試條件時默認應用的規則。

    posted on 2005-11-16 11:43 魚上游 閱讀(1378) 評論(3)  編輯  收藏 所屬分類: 爪哇友鄰真不少


    FeedBack:
    # re: XSL 學習筆記 —— 基礎篇
    2005-12-13 16:07 | david.turing
    還不錯!  回復  更多評論
      
    # re: XSL 學習筆記 —— 基礎篇
    2006-07-26 17:58 | zy
    請問一下,怎么設定條件,讓我的數據可以在表格中分兩列輸出.
    開始時以為很簡單,可是,做的時候發現很難.
    因為,在xsl中,沒有辦法將<tr></tr>分開來寫,而一定要在一個<xsl:if><xsl:if>中寫完  回復  更多評論
      
    <2005年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(82)

    隨筆分類(59)

    文章分類(21)

    相冊

    收藏夾(40)

    GoodSites

    搜索

    •  

    積分與排名

    • 積分 - 1267976
    • 排名 - 22

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 国产精品久久久久久久久免费| 又粗又长又爽又长黄免费视频| 亚洲一区二区三区国产精品| 无码A级毛片免费视频内谢| 亚洲国产成人精品无码久久久久久综合| 在线看片无码永久免费aⅴ| 亚洲综合小说另类图片动图 | 国产免费MV大全视频网站| 国精产品一区一区三区免费视频 | 一个人看的www免费高清| 久久综合九色综合97免费下载| 香蕉视频免费在线| 免费a级毛片永久免费| 亚洲成年轻人电影网站www| 亚洲欧美日韩国产成人| 国产免费变态视频网址网站| 一级女性全黄生活片免费看| 亚洲人成人一区二区三区| 国产色在线|亚洲| 岛国片在线免费观看| 久久亚洲综合色一区二区三区| 亚洲综合自拍成人| 99re热免费精品视频观看| 亚洲欧美乱色情图片| 国产日产亚洲系列最新| 亚洲精品免费在线观看| 亚洲中字慕日产2021| 国产精品酒店视频免费看 | 亚洲精品亚洲人成在线观看下载| 亚洲美女激情视频| 最近中文字幕无吗高清免费视频| 国产精品美女午夜爽爽爽免费| 亚洲无av在线中文字幕| 日本人的色道免费网站| 亚洲VA中文字幕不卡无码| 国产三级在线免费观看| 亚洲精品网站在线观看你懂的| 亚洲欧洲日产国码久在线| 国产三级免费观看| 久久午夜夜伦鲁鲁片免费无码| 亚洲人成人77777网站|