1 / 50

第五章 XML 可延伸樣式語言

第五章 XML 可延伸樣式語言. XSL 簡介 XSLT 樣版規則及樣式 範本元素 排序元素. XSL 簡介. XSL 是一種強大的 Script 語言,在功能上主要分為兩個部分: 轉換 XML 文件:將 XML 文件架構轉換成另一個 XML 架構的文件或非 XML 文件,例如 HTML 文件。 格式化 XML 文件:格式化元素內容的樣式,以便顯示出 XML 文件。. XSL 簡介 ( 續 ). XSL 的兩個部分分別屬於不同的規格,其中轉換部分的規格稱為 XSLT(XSL Transformations) ,至於格式化部分的規格目前仍屬於草案階段。

cyrah
Download Presentation

第五章 XML 可延伸樣式語言

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 XML可延伸樣式語言 XSL簡介 XSLT 樣版規則及樣式 範本元素 排序元素

  2. XSL簡介 • XSL是一種強大的Script語言,在功能上主要分為兩個部分: • 轉換XML文件:將XML文件架構轉換成另一個XML架構的文件或非XML文件,例如HTML文件。 • 格式化XML文件:格式化元素內容的樣式,以便顯示出XML文件。

  3. XSL簡介(續) • XSL的兩個部分分別屬於不同的規格,其中轉換部分的規格稱為XSLT(XSL Transformations),至於格式化部分的規格目前仍屬於草案階段。 • 目前能支援XML的瀏覽器並不多,所以XSLT的角色就相當重要,只需XSLT就可以XML文件轉換成HTML文件,而XML配合XSLT就可以在支援HTML的瀏覽器顯示文件內容。

  4. XML 文件的輸出方式 Web browser XSL Transformation Spec HTML Document XSL Transformation XSL Style Sheet CSS Style Sheet XML Document XSL display Engine XML-enabled Web Browser

  5. XSL 與 CSS 的比較

  6. XSLT • 使用XSLT,開發者可以描述轉換XML文件結構的樣式表,而由XSLT解譯器來作轉換 • XSLT可以經由你所指定的轉換規則,來將一個XML的原始文件轉換成目的文件

  7. XSLT 運作方式

  8. XSLT 輸出 XML XSLT處理器 HTML/XML XSLT

  9. XPath • XPath 是一種語言,用來描述XML節點的位置。 例如: /BOOKLIST/BOOK/CODE

  10. XPath的位置路徑

  11. 子元素的位置路徑 • /booklist/book/name • /booklist/book/author/name • //name • /booklist/book//name • /booklist/* • //* • /booklist/book/@sales • /booklist/book[1]

  12. 使用XSLT • XSLT的語法 <?xml-stylesheet type=“text/xsl” herf=“ch8-3.xsl” ?>

  13. XSLT簡單範例 XML文件 <?xml version="1.0" encoding="Big5"?> <?xml-stylesheet type="text/xsl" href="ch8-3.xsl" ?> <hello>大家好!</hello>

  14. <?xml version="1.0" encoding="Big5"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>測試XSLT</title></head> <body> <h2><center><xsl:value-of select="hello"/></center></h2> </body> </html> </xsl:template> </xsl:stylesheet>

  15. 經過轉換 未經過轉換

  16. XSLT基本架構 <?xml version="1.0" encoding="Big5"?> <xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> ………… ………… </xsl:template> </xsl:stylesheet>

  17. XSLT基本架構(續) • 前面曾經說過,XSLT屬於範本驅動的轉換,概標籤下的子元素是由數個xsl:template元素組成,每一個元素的範本對應指定元素轉換後的輸出資料,這些資料就是HTML標籤或不同架構的XML元素。

  18. 內容元素 xsl:value-of • 在XML文件使用XSLT進行轉換時,我們需要取得XML元素的內容,只需指定select屬性的元去名稱即可,如下所示: <xsl:template match="/"> <h2><xsl:value-of select="hello"/></h2> </xsl:template>

  19. 內容元素 xsl:value-of(續) • 選擇屬性內容: 如果轉換輸出的為XML元素的屬性,我們需要在屬性前加上「@」符號,如下所示: <xsl:template match=“hello"> <h2><xsl:value-of select=“@good"/></h2> </xsl:template>

  20. 範本元素 xsl:template <xsl:template match="/"> …………………… </xsl:template> • 上述開始標籤<xsl:template…>和</xsl:template>結尾標籤間的就是範本定義的轉換規則,XSLT處理器會將此範本套用在match屬性指定的元素,這也包括其下的子元素,以此match屬性的模型為「/」,這指的是根節點和其下的所有元素。

  21. 範本元素 xsl:template(續) • Match屬性: • Template最重要的屬性就是match,這個屬性就是Xpath指出元素 的位置路徑,一些常用的屬性內容如下:

  22. 範本元素 xsl:template(續) • Match屬性舉例說明: <xsl:template match="/glossary/item[position()=1]"> <p><b><xsl:value-of select="title"/> - <xsl:value-of select="definition"/></b> (<xsl:value-of select="definition/title"/>)</p> </xsl:template>

  23. 遞迴範本元素 xsl:apply-templates • 如果單純使用前面的範本元素,我們需要替每一個XML元素建立轉換的script碼,遞迴範本元素xsl:apply-template可以使用遞迴的方式顯示所有的子元素。

  24. 遞迴範本元素 xsl:apply-templates <xsl:template match=“item"> <b><xsl:value-of select="title"/></b> <xsl:apply-templates select="definition"/> </xsl:template> • 上述範本元素的模型為item,擁有兩個子元素title和definition元素,其中definition也擁有同名的子元素 title,如果沒有遞迴範本元素 ,XSLT處理器就到item元素為止。

  25. 遞迴範本元素 xsl:apply-templates • 如果使用遞回範本元素,處理器會遞迴繼續找尋子節點,此時有兩種情況,如下所示: • 沒有select屬性:繼續找尋所有的子節點,也就是title和definition元素,再次找尋是右有符合的範本,繼續執行轉換。 • 擁有屬性select :select屬性能夠指定開始的元素,以上頁例子,就是由item子元素definition開始,如此就不包括子元素title。

  26. XSLT的迴路元素 • xsl:for-each 語法 <xsl:for-each select="booklist/book"> ……… </xsl:for-each> • 上述迴路元素的select屬性指定顯示的元素,以此示所有book元素,標籤內容可以使用xsl:value-of元素輸出子元素的內容。

  27. 舉例說明:下例為XML原始檔案

  28. 而下列則是XSLT的部分,藉此for-each元素,便可得到下頁的結果。而下列則是XSLT的部分,藉此for-each元素,便可得到下頁的結果。 <xsl:template match="/"> ……… <xsl:for-each select="booklist/book"> <tr><td><xsl:value-of select="code"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="authorlist/author"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:for-each> ………

  29. 由此可見,for-each元素可將所有的元素內容,並且加以修飾顯示方式,如下所示:由此可見,for-each元素可將所有的元素內容,並且加以修飾顯示方式,如下所示:

  30. 過濾XML元素的select屬性 • 在使用for-each迴路時,如果不想顯示所有的XML元素,我們可以在select屬性上加上過濾條件,只顯示符合條件的元素,如下所示: • 上述迴路的條件為book元素屬性sales是Y。 <xsl:for-each select="booklist/book[@sales='Y']">

  31. 若我們使用前面的XML文件套用前一頁的select屬性用法,則得到以下的結果:若我們使用前面的XML文件套用前一頁的select屬性用法,則得到以下的結果:

  32. 排序元素 xsl:sort • HTML標籤的內容無法進行排序的處理,但是XSLT Script擁有排序元素,能夠指定XML元素進行排序。 <xsl:sort select="title" order="descending"/> descending:從大到小 ascending: 從小到大

  33. 由前一頁的XSLT來看,依據title來排序,從大到小,便可由下表可得證:由前一頁的XSLT來看,依據title來排序,從大到小,便可由下表可得證:

  34. 單一條件元素 xsl:if • 目前XSLT Script都是直接輸出轉換的結果,但是在轉換時我們可能需要測試一些情況,以決定是否轉換,這就屬於單一條件元素。 <xsl:if test="@sales = 'Y'"> …….. </xsl:if> <xsl:if test="@sales = 'N'"> …….. </xsl:if>

  35. 所以,我們可以利用單一條件元素來呈現下列的表格:所以,我們可以利用單一條件元素來呈現下列的表格:

  36. 多條件元素 xsl:choose • 如果在條件處理上需要多條件,我們可以使用xsl:choose、xsl:when、xsl:otherwise元素建立多條件元素。 <xsl:choose> <xsl:when test="price > 500"> ……… </xsl:when> <xsl:when test="price = 500"> ……… </xsl:when> <xsl:otherwise> ……… </xsl:otherwise> </xsl:choose>

  37. 利用多條件元素 choose 便可以達成多項條件的判斷,如下圖所示。

  38. 呼叫函數元素 xsl:call-template • 建立範本函數 • 上述範本並不是XML元去的範本,而是使用name屬性建立一個名為showbook的範本函數。 <xsl:template name=“showbook"> …………… </xsl:template>

  39. 呼叫函數元素 xsl:call-template(續) • 呼叫範本函數元素 • 上述call-template元素呼叫範本函數,name屬性指定範本函數的名稱。 <xsl:call-template name=“showbook"> …………… </xsl:call-template>

  40. 呼叫函數元素 xsl:call-template (續) • 範本函數的參數傳遞 <xsl:template name=“showbook"> <xsl:param name=“position” select=“/booklist/book”/> …………… </xsl:template>

  41. 呼叫函數元素 xsl:call-template (續) • 如果範本函數需要傳入參數,只需在xsl:template元素為一個參數,name屬性為參數名稱,select屬性為參數的預設值,當呼叫範本函數時沒有傳入參數,就是使用select屬性的預設值。

  42. 呼叫函數元素 xsl:call-template (續) • 在範本函數傳入參數後,請使用「$」符號加上參數名稱取出參數值,如下所示。 • $position • 接著回到呼叫範本函數call-template元素,使用with-param元素傳入範本函數所需的參數,如下頁所示。

  43. 呼叫函數元素 xsl:call-template (續) <xsl:call-template name="showbook"> <xsl:with-param name="position" select="/booklist/book[price &lt; '500']"/> </xsl:call-template> • 上述元素with-param元素對應template子元素param,其中name性為參數名稱,select為參數值。

  44. 複製元素xsl:copy • 如果XML元素名稱是輸出元素的名稱,我們可以直接使用copy元素輸出XML元素名稱,例如:XML元素title,如下所示: <xsl:template match=“title”> <xsl:copy> <xsl:apply-template/> </xsl:copy> <xsl:template>

  45. 複製元素xsl:copy (續) • 上頁範本元素直接將title元素輸出成同名的元素,如果需要複製整個子元素,使用萬用字元「*」,如下所示: <xsl:template match=“title”> <xsl:copy select=“*”/> </xsl:template>

  46. 刪除元素 • 如果想刪除指定的XML去,只需建立所需的範本元素,元素 內容為空的,如下所示: <xsl:template match=“code”> </xsl:template> • 上述範本元素為空元素,也就是刪除XML元素code。

  47. 更改元素名稱 • 如果需要更改元素名稱,例如:將XML的title元素輸出成HTML的h2標籤,如下所示: <xsl:template match=“title”> <h2> <xsl:apply-template/> </h2> </xsl:template> • 上述範本元素只需活用apply-template元素輸出成h2元素。

  48. 建立元素xsl:element • 如果輸出的XML文件要新增XML元素,只需要使用xsl:element元素的name屬性新增所需的元素,如下所示: <xsl:element name=“catalog”>網頁製作</xsl:element> • 上述element元素建立一個XML元素catalog,如下: <catalog>網頁製作</catalog>

  49. 建立屬性元素xsl:attribute • 如果新建立的元素 擁有屬性,我們可以在element子元素attribute新元素的屬性,如下所示: <xsl:element name=“catalog”> <xsl:attribute name=“code”>A001</xsl:attribute> 網頁製作 </xsl:element>

  50. 建立屬性元素xsl:attribute (續) • 上頁XSLT元素建立XML元素catalog和屬性code,如下所示: <catalog code=“A001”>網頁製作</catalog> • 同樣方式,可以使用comment建立註解文字,如下所示: <xsl:comment>網頁製作研究系列</xsl:comment>

More Related