67
1 XML Xpath 轉轉 XML 轉轉 No. XML - ch8 No. XML - ch8

XML 、 Xpath 轉換 XML 文件

  • Upload
    kamana

  • View
    100

  • Download
    7

Embed Size (px)

DESCRIPTION

XML 、 Xpath 轉換 XML 文件. No. XML - ch8. Part I 關於 XSL. 什麼是 XSL. XSL ( 延伸樣式語言 ) ,是用於展示 XML 內容外觀 ( font, size, color .. ) 於網頁的 樣式語言。 X ML S tyleSheet L anguage e X tensible S tyleSheet L anguage 屬於一種 Script 語言 XSL 的 語 法須依 XML 格式 , 並以 *. xsl 為副檔名 。 在功能上分為二部分 轉換 XML 文件 - PowerPoint PPT Presentation

Citation preview

Page 1: XML 、 Xpath 轉換 XML 文件

1

XML 、 Xpath 轉換 XML 文件

No. XML - ch8No. XML - ch8

Page 2: XML 、 Xpath 轉換 XML 文件

2

Part I

關於 XSL

Page 3: XML 、 Xpath 轉換 XML 文件

3

什麼是 XSL XSL ( 延伸樣式語言 ) ,是用於展示 XML 內容外觀 (f

ont, size, color .. ) 於網頁的樣式語言。 XML StyleSheet Language eXtensible StyleSheet Language

屬於一種 Script 語言 XSL 的語法須依 XML 格式 ,並以 *.xsl 為副檔名。 在功能上分為二部分

轉換 XML 文件 格式化 XML 文件 (IE 不支援格式化的部分規格 )

Page 4: XML 、 Xpath 轉換 XML 文件

4

為什麼需要 XSL XSL 用來定義 XML 文件該如何顯示。 XSL 能夠在輸出的文件中添加新的元素,或移動元素。 XSL 也能夠重新排列或者索引數據,它可以偵測並決

定哪些元素被顯示,顯示多少。 XSL 和 XSLT 的基本內容是一樣的。 XSLT 的用意是幫助 XML 文檔 (document) 轉換為其

它文檔 .

Page 5: XML 、 Xpath 轉換 XML 文件

5

XSL FamilySGML

XML HTML

XSL

XSL FO XSLT

XSLT

XPATH

Page 6: XML 、 Xpath 轉換 XML 文件

6

CSS 與 XSLT 的差異. CSS XSLT

適用在 HTML 可以 不行適用在 XHTML 可以 可以

適用在 XML 可以 可以使用的語法 CSS 樣式語法 XML 語法

是否是轉換語言 不是 是

Page 7: XML 、 Xpath 轉換 XML 文件

7

XML Transform -Server 端執行

XML

XSLT

XML處理器

XML處理器

XSLT處理器

結果樹

HTML 文件

Client 端Server 端

Page 8: XML 、 Xpath 轉換 XML 文件

8

XML Transform -Client 端執行

XML

XSLT

將 XML 與 XSLT 傳至Client 端 , 由 IE 直接解析

Client 端Server 端

Server 端的執行過程

Page 9: XML 、 Xpath 轉換 XML 文件

9

Part II

XPath 語言

Page 10: XML 、 Xpath 轉換 XML 文件

10

XPath– 關於定位 Xpath

XPath 是一種語言,一種節點位置的語言,用來描述 XML 元素的位置,如同硬碟資料夾的檔案路徑。

幫助 XSLT 在 XML 來源文件中查找定位資訊的語言。

Xpath 同時被 XSLT 和 Xpointer 所使用。

Page 11: XML 、 Xpath 轉換 XML 文件

Xpath 資料模型

root

<?xml?> glossary

item item item

definition

definitiondefinitionversion

version

version

text

texttext

text

text

title

title

title

titletext title

根節點

元素節點

屬性節點

文字資料

PI 節點 /glossary/item/title

/glossary/item//title

XML 文件

Xpath 位置路徑

Page 12: XML 、 Xpath 轉換 XML 文件

12

XPath– 目前位置 "/" 是表示目前文檔的節點 , 類似 DOS 目

錄分割符。 “//” 則表示目前文檔中下下層的子節點。

<xsl:for-each select="child::PEOPLE/descendant::PERSON"> <xsl:for-each select="PEOPLE//PERSON">

PEOPLE//PERSON 表示在 PEOPLE 元素下所有的 PERSON 元素。

Page 13: XML 、 Xpath 轉換 XML 文件

13

XPath – 尋址操作 軸 (Axis)- 選擇目前節點周圍所有的節點

self . 選擇目前的節點。 parent .. 選擇目前節點的父節點。 attribute @ 選擇一個元素的所有屬性。

Predicate 則用來定位目前節點內部的元素,以方括號 [] 中加表達式: [ Expression ] 。 PERSON[position()=2] : 這句代碼表示尋找第二個“

PERSON” 元素 PERSON[starts-with(name, “B”)]: 這句代碼表示

尋找所有名稱以“ B” 開頭的 PERSON 元素

Page 14: XML 、 Xpath 轉換 XML 文件

14

XPath – 運算符號 and, or 就是普通意義的 and, or >, <, >=, <=, !=, =

注意:在 XSL 文件中, < 符號要用 &lt; 表示, > 符號要用 &gt; 表示。

Page 15: XML 、 Xpath 轉換 XML 文件

15

XPath – 功能函數 在 XPath裏有很多功能函數可以幫助我們精確尋找

需要的節點。 count() :統計次數,返回符合條件的節點的個數。<xsl:value-of select="count(PERSON[name=tom])"/>

number() :將屬性的值中的文本轉換為數值。The number is: <xsl:value-of select="number(book/p

rice)"/> sum() :求和。

Total Price = <xsl:value-of select="sum(//price)"/>

Page 16: XML 、 Xpath 轉換 XML 文件

16

Part III

XSLT 語法

Page 17: XML 、 Xpath 轉換 XML 文件

17

顯示範例

9876543 戚玉樑 [email protected]

本學期必 ( 選 )修科目 :

基本資料 :

資管系

OO and Java Programming Dr. Max Chi 3

XML Design and Programming Dr. Max Chi 3

Page 18: XML 、 Xpath 轉換 XML 文件

18

簡單的例子 -1

第一步:建立 XML 檔 course.xml

<?xml version="1.0" ?><Course>XML Design and Programming</Course><Instructor>Dr. Max Chi</Instructor>

Page 19: XML 、 Xpath 轉換 XML 文件

19

簡單的例子 -2第二步:建立 XSLT 檔 show.xsl 。

<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><xsl:template match="/"><html><body> <p><xsl:value-of select="Course"/></p> <p><xsl:value-of select="Instructor"/></p></body></html></xsl:template></xsl:stylesheet>

Page 20: XML 、 Xpath 轉換 XML 文件

20

簡單的例子 -3

第三步:在 XML 中調用 show.xsl 文件。修改 course.xml 為:

<?xml version="1.0" ?>

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

<Course>XML Design and Programming</Course>

<Instructor>Dr. Max Chi</Instructor>

執行

Page 21: XML 、 Xpath 轉換 XML 文件

課本的例子 -1<?xml version="1.0" encoding="Big5"?><glossary> <item> <title version="EN">eXtensible Markup Language</title> <definition>可擴充展標示語言 <title>XML</title></definition> </item> <item> <title version="EN">encoding</title> <definition>字碼集 </definition> </item> <item> <title version="EN">Uniform Resource Identifier</title> <definition> 統一資源識別符號 <title>URI</title></definition> </item></glossary>

Page 22: XML 、 Xpath 轉換 XML 文件

課本的例子 -2<?xml version="1.0" encoding="Big5"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/glossary/item[position()=1]"> <center><h2>XML專有名詞 </h2></center> <hr/> <p><b><xsl:value-of select="title"/> - <xsl:value-of select="definition"/></b> (<xsl:value-of select="definition/title"/>)</p></xsl:template>

<xsl:template match="/glossary/item[position()=2]"> <p><i><xsl:value-of select="title"/> - <xsl:value-of select="definition"/></i> </p></xsl:template>

<xsl:template match="/glossary/item/title[@version='AB']"> <p><u><xsl:value-of select="."/> - <xsl:value-of select="@version"/></u></p></xsl:template>

<xsl:template match="/glossary/item[last()]/definition"> <p><u><xsl:value-of select="."/></u> (<xsl:value-of select="title"/>)</p></xsl:template>

</xsl:stylesheet>

Page 23: XML 、 Xpath 轉換 XML 文件

課本的例子 -3<?xml version="1.0" encoding="Big5"?><?xml-stylesheet type="text/xsl" href="Ch8-5-1.xslt" ?><glossary> <item> <title version="EN">eXtensible Markup Language</title> <definition>可擴充展標示語言 <title>XML</title></definition> </item> <item> <title version="TW">encoding</title> <definition>字碼集 </definition> </item> <item> <title version="AB">Uniform Resource Identifier</title> <definition> 統一資源識別符號 <title>URI</title></definition> </item></glossary>

執行

Page 24: XML 、 Xpath 轉換 XML 文件

Ex411_1.xsl

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">

<xsl:template match="唐詩 /五言絕句 / 內容 " > <xsl:value-of /> </xsl:template>

</xsl:stylesheet>XSL 的語法須依 XML 格式

Page 25: XML 、 Xpath 轉換 XML 文件

25

XML 套用 XSL XML 如要使用 XSL ( 延伸樣式語言 ) ,必須在宣告區註明 。

<?xml:stylesheet type=”text/xsl” href=“URL”?>

範例<?xml-stylesheet href="ex421_2.xsl" type="text/xsl"?><?xml-stylesheet type="text/xsl" href="ex421_2.xsl"?>

使用 ? 前導

可調換宣告順序

Page 26: XML 、 Xpath 轉換 XML 文件

26

XSL 與 HTML 混合使用<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <xsl:value-of select ="唐詩 /五言絕句 / 內容 " /> <br/> <xsl:value-of select ="唐詩 /五言絕句 /標題 " /> <br/> <xsl:value-of select ="唐詩 /五言絕句 / 作者 " /> </xsl:template></xsl:stylesheet>

Page 27: XML 、 Xpath 轉換 XML 文件

27

XSL 與 HTML 混合使用<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <h3> <xsl:value-of select ="唐詩 /五言絕句 / 作者 " /> </h3> <h2> <xsl:value-of select ="唐詩 /五言絕句 /標題 " /> </h2> <xsl:value-of select ="唐詩 /五言絕句 / 內容 " /> </xsl:template></xsl:stylesheet>

XSL 與 HTML 混合使用例 413_2.xsl

Page 28: XML 、 Xpath 轉換 XML 文件

28

XSL 與 CSS ?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <h3 style="color:red"> <xsl:value-of select ="唐詩 /五言絕句 / 作者 " /> </h3> <h2 style="color:red"> <xsl:value-of select ="唐詩 /五言絕句 /標題 " /> </h2>

局部性改變原 HTML/ CSS 之樣式例 415_1.xsl

Page 29: XML 、 Xpath 轉換 XML 文件

29

編寫一個 XSL 檔案 第一行使用 XML 標準宣告<?xml version="1.0" encoding="BIG5" ?>

第二行宣告 xsl 的 NameSpace <xsl:stylesheet xmlns:xsl="uri:xsl"><xsl:stylesheet xmlns:xsl="http://www.w3.org

/TR/xsl">

Page 30: XML 、 Xpath 轉換 XML 文件

30

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>

在根標籤需宣告名稱空間

Page 31: XML 、 Xpath 轉換 XML 文件

31

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 32: XML 、 Xpath 轉換 XML 文件

32

Xsl:value-of ( 內容元素 ) 從 XML 文件中取得元素的值 語法<xsl:value-of select=“ 選取敘述” ></xsl:value-of> 選取敘述 : 選取欲取得值之元素的 Xpath敘述

範例<xsl:template match=“item”> <xsl:value-of select=“title”/><xsl:template>

Page 33: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例 -1 (全體 ) <?xml version="1.0" encoding="BIG5" ?

><xsl:stylesheet xmlns:xsl="http://www.

w3.org/TR/WD-xsl"> <xsl:template> <xsl:value-of select =" 唐詩 " /> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex421_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 > <姓名 > 李白 </姓名 > < 字號 > 太白 </ 字號 > </ 作者 > <標題 >怨情 </標題 > < 內容 >美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰? </ 內容 > </五言絕句 ></唐詩 >

李白 太白 怨情 美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰?

Ex421_1.xsl

執行

Page 34: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例 -2 ( 細節 )

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template>

<h2> 作者的字號 :

<xsl:value-of select ="唐詩 /五言絕句 / 作者 / 字號 " />

</h2>

</xsl:template>

</xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex421_2.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 > <姓名 > 李白 </姓名 > < 字號 > 太白 </ 字號 > </ 作者 > <標題 >怨情 </標題 > < 內容 >美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰? </ 內容 > </五言絕句 ></唐詩 >

作者的字號 : 太白

Ex421_2.xsl

執行

Page 35: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例-3 (錯置)<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <h2> 作者的姓名 : <xsl:value-of select ="唐詩 /五言絕句 /姓名 " /> <br/> 作者的字號 : <xsl:value-of select ="唐詩 /五言絕句 / 作者 / 字號 " /> </h2> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex421_3.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 > <姓名 > 李白 </姓名 > < 字號 > 太白 </ 字號 > </ 作者 > <標題 >怨情 </標題 > < 內容 >美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰? </ 內容 > </五言絕句 ></唐詩 >

作者的姓名 : 作者的字號 :

無內容 , 路徑必須由根元素起逐層 mapping

Ex421_3.xsl

執行

Page 36: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例 -4 ( 重覆 )<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <h2> 作者 : <xsl:value-of select ="唐詩 /五言絕句 / 作者 /姓名 " /> <br/> 標題 : <xsl:value-of select ="唐詩 /五言絕句 /標題 " /> </h2> <h3> <xsl:value-of select ="唐詩 /五言絕句 / 內容 " /> </h3> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex422_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 > <姓名 > 李白 </姓名 > < 字號 > 太白 </ 字號 > </ 作者 > <標題 >怨情 </標題 > < 內容 >美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰? </ 內容 > </五言絕句 ></唐詩 >

作者 : 李白 標題 : 怨情 美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰?

Ex422_1.xsl

執行

Page 37: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例 -5 ( 順序 )<?xml version="1.0" encoding="BIG5" ?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template>

<h2>

<xsl:value-of select ="唐詩 /五言絕句 /標題 " />

--- 作者 :

<xsl:value-of select ="唐詩 /五言絕句 / 作者 /姓名 " />

</h2>

<h3>

<xsl:value-of select ="唐詩 /五言絕句 / 內容 " />

</h3> </xsl:template>

</xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex422_2.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 > <姓名 > 李白 </姓名 > < 字號 > 太白 </ 字號 > </ 作者 > <標題 >怨情 </標題 > < 內容 >美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰? </ 內容 > </五言絕句 ></唐詩 >

怨情 --- 作者 : 李白 美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰?

改變文件內容順序

Ex422_2.xsl

執行

Page 38: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例 -6 ( 屬性 )<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <h2> <xsl:value-of select ="唐詩 /五言絕句 /@標題 " /> </h2> <h3> <xsl:value-of select ="唐詩 /五言絕句 / 內容 " /> </h3> </xsl:template></xsl:stylesheet>

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

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

<唐詩 >

<五言絕句 標題 ="怨情 ">

< 作者 字號 =“太白” > 李白 </ 作者 >

< 內容 >美人捲珠簾,深坐蹙蛾眉。 但見淚痕濕,不知心恨誰? </ 內容 >

</五言絕句 >

</唐詩 >

怨情 美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰?

藉 @ 顯示屬性內容

Ex423_1.xsl

執行

Page 39: XML 、 Xpath 轉換 XML 文件

xsl:value-of 範例 -7 ( 屬性 )<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <h2> <xsl:value-of select ="唐詩 /五言絕句 /@標題 " /> --- <xsl:value-of select ="唐詩 /五言絕句 / 作者 " /> [ 字 : <xsl:value-of select ="唐詩 /五言絕句 / 作者 /@ 字號 " /> ] </h2> <h3> <xsl:value-of select ="唐詩 /五言絕句 / 內容 " /> </h3> </xsl:template></xsl:stylesheet>

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

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

<唐詩 >

<五言絕句 標題 ="怨情 ">

< 作者 字號 =“太白” > 李白 </ 作者 >

< 內容 >美人捲珠簾,深坐蹙蛾眉。 但見淚痕濕,不知心恨誰? </ 內容 >

</五言絕句 >

</唐詩 >

怨情 --- 李白 [ 字 : 太白 ] 美人捲珠簾,深坐蹙蛾眉。但見淚痕濕,不知心恨誰?

藉 @ 顯示屬性內容

ex423_2.xsl

執行

Page 40: XML 、 Xpath 轉換 XML 文件

40

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 41: XML 、 Xpath 轉換 XML 文件

41

xsl:template (範本元素 ) xsl:template 是用來指定一個範本,內含元素內容的

樣式規則。 語法<xsl:template match=“ 模式” name=“ 樣版名稱” >……</xsl:template> Match 屬性的模型為「 /」指的是根節點和其下所有元素

只用一組 xsl: template 時可省略宣告 xsl:stylesheet xsl:template 使用範例<xsl:template match=“ 內容” >

執行

Page 42: XML 、 Xpath 轉換 XML 文件

42

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 43: XML 、 Xpath 轉換 XML 文件

43

xsl:apply-templates ( 遞回範本元素 )

xsl:apply-templates 使用遞迴方式顯示所有的子元素可用來呼叫其他範本 (temlate) 處理子元素內容的樣式規則, 如同呼叫一遞回函數。

xsl:apply-templates 使用於 xsl:template 內,常見使用範例

•<xsl:apply-templates /> •<xsl:apply-templates select="標題 " />

Page 44: XML 、 Xpath 轉換 XML 文件

xsl:apply-templates 範例 -1

<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:for-each select="唐詩 /五言絕句 "> <xsl:apply-templates /> </xsl:for-each> </xsl:template> <xsl:template match=" 作者 "> <span style="color:red;font-size:18"> <xsl:value-of /> </span> </xsl:template> <xsl:template match="標題 "> <span style="color:blue;font-size:15"> <xsl:value-of /> </span> </xsl:template> <xsl:template match=" 內容 "> <p><xsl:value-of /></p> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex431_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >竹里館 </標題 > < 內容 >獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >孟浩然 </ 作者 > <標題 >宿建德江 </標題 > < 內容 > 移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >王之渙 </ 作者 > <標題 >登鸛雀樓 </標題 > < 內容 >白日依山盡,黃河入海流。欲窮千里目,更上一層樓。 </ 內容 > </五言絕句 ></唐詩 >

王維  竹里館獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。孟浩然  宿建德江移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。王之渙  登鸛雀樓白日依山盡,黃河入海流。欲窮千里目,更上一層樓。

Ex431_1.xsl

執行

Page 45: XML 、 Xpath 轉換 XML 文件

xsl:apply-templates 範例 -2 <?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:for-each select="唐詩 /五言絕句 "> <xsl:apply-templates /> </xsl:for-each> </xsl:template> <xsl:template match="*"> <p style="color:red;font-size:15"> <xsl:value-of /> </p> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex431_3.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >竹里館 </標題 > < 內容 >獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >孟浩然 </ 作者 > <標題 >宿建德江 </標題 > < 內容 > 移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >王之渙 </ 作者 > <標題 >登鸛雀樓 </標題 > < 內容 >白日依山盡,黃河入海流。欲窮千里目,更上一層樓。 </ 內容 > </五言絕句 ></唐詩 >

王維  竹里館獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。孟浩然  宿建德江移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。王之渙  登鸛雀樓白日依山盡,黃河入海流。欲窮千里目,更上一層樓。

Ex431_3.xsl

執行

Page 46: XML 、 Xpath 轉換 XML 文件

xsl:apply-templates 範例 -3 <?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:for-each select="唐詩 /五言絕句 "> <xsl:apply-templates select="標題 " /> <xsl:apply-templates select=" 作者 " /> <p/> </xsl:for-each> </xsl:template> <xsl:template match=" 作者 "> <span style="color:red;font-size:18"> <xsl:value-of /> </span> </xsl:template> <xsl:template match="標題 "> <span style="color:blue;font-size:24"> <xsl:value-of /> </span> </xsl:template> <xsl:template match=" 內容 "> <p><xsl:value-of /></p> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex432_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >竹里館 </標題 > < 內容 >獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >孟浩然 </ 作者 > <標題 >宿建德江 </標題 > < 內容 > 移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >王之渙 </ 作者 > <標題 >登鸛雀樓 </標題 > < 內容 >白日依山盡,黃河入海流。欲窮千里目,更上一層樓。 </ 內容 > </五言絕句 ></唐詩 >

竹里館 王維

宿建德江 孟浩然

登鸛雀樓 王之渙Ex432_1.xsl執行

Page 47: XML 、 Xpath 轉換 XML 文件

47

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 48: XML 、 Xpath 轉換 XML 文件

48

Xsl:for-each 對於 XML 文件的重複元素,可使用 XSL

T遞迴元素顯示 XML 元素內容 語法<xsl:for-each select="booklist/book">……</xsl:for-each>

Page 49: XML 、 Xpath 轉換 XML 文件

49

xsl:for-each (迴路元素 ) xsl:for-each 是用來取出 XML 文件中被

選擇相同元素的內容。 xsl:for-each 通常亦搭配

select= “ tag-path ” 執行選擇 order-by= “ tag-path ” 執行排序。

Page 50: XML 、 Xpath 轉換 XML 文件

xsl:for-each 範例 -1 ( 全體 ) <?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:for-each select="唐詩 /五言絕句 "> <p style="color:blue"> <xsl:value-of select=" 作者 " />  <xsl:value-of select="標題 " /></p> <p><xsl:value-of select=" 內容 " /></p> </xsl:for-each> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex424_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >竹里館 </標題 > < 內容 >獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >孟浩然 </ 作者 > <標題 >宿建德江 </標題 > < 內容 > 移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >王之渙 </ 作者 > <標題 >登鸛雀樓 </標題 > < 內容 >白日依山盡,黃河入海流。欲窮千里目,更上一層樓。 </ 內容 > </五言絕句 ></唐詩 >

王維  竹里館獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。孟浩然  宿建德江移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。王之渙  登鸛雀樓白日依山盡,黃河入海流。欲窮千里目,更上一層樓。

Ex424_1.xsl

執行

Page 51: XML 、 Xpath 轉換 XML 文件

xsl:for-each 範例 -2 ( 表格 ) <?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <table border="6"> <xsl:for-each select="唐詩 /五言絕句 "> <tr> <td width="20%"><xsl:value-of select=" 作者 " /></td> <td width="25%"><xsl:value-of select="標題 " /></td> <td><xsl:value-of select=" 內容 " /></td> </tr> </xsl:for-each> </table> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex424_2.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >竹里館 </標題 > < 內容 >獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >孟浩然 </ 作者 > <標題 >宿建德江 </標題 > < 內容 > 移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >王之渙 </ 作者 > <標題 >登鸛雀樓 </標題 > < 內容 >白日依山盡,黃河入海流。欲窮千里目,更上一層樓。 </ 內容 > </五言絕句 ></唐詩 >

Ex424_2.xsl

執行

Page 52: XML 、 Xpath 轉換 XML 文件

xsl:for-each 範例 -3 ( 排序 ) <?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <table border="6"><xsl:for-each select="唐詩 /五言絕句 " order-by=" 作者 "> <tr> <td width="15%"><xsl:value-of select=" 作者 " /></td> <td width="20%"><xsl:value-of select="標題 " /></td> <td><xsl:value-of select=" 內容 " /></td> </tr> </xsl:for-each> </table> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex424_3.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >竹里館 </標題 > < 內容 >獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >孟浩然 </ 作者 > <標題 >宿建德江 </標題 > < 內容 > 移舟泊煙渚,日暮客愁新。野曠天低樹,江清月近人。 </ 內容 > </五言絕句 > <五言絕句 > < 作者 >王之渙 </ 作者 > <標題 >登鸛雀樓 </標題 > < 內容 >白日依山盡,黃河入海流。欲窮千里目,更上一層樓。 </ 內容 > </五言絕句 ></唐詩 >

遞增排序

Ex424_3.xsl

執行

Page 53: XML 、 Xpath 轉換 XML 文件

xsl:for-each 範例 -4 (Multiple) <?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <table border="6"> <xsl:for-each select="唐詩 /五言絕句 "> <tr> <td width="15%"><xsl:value-of select=" 作者 " /></td> <td width="15%"><xsl:value-of select="標題 " /></td> <td><xsl:value-of select=" 內容 " /></td> </tr> </xsl:for-each> </table> <table border="6"> <xsl:for-each select="唐詩 /七言絕句 "> <tr> <td width="15%"><xsl:value-of select=" 作者 " /></td> <td width="15%"><xsl:value-of select="標題 " /></td> <td><xsl:value-of select=" 內容 " /></td> </tr> </xsl:for-each> </table> </xsl:template></xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href="ex435_2.xsl" type="text/xsl"?> <唐詩 > <五言絕句 > < 作者 >王維 </ 作者 > <標題 >送別 </標題 > < 內容 >山中相送罷,日暮掩柴扉。春草明年綠,王孫歸不歸?</ 內容 > </五言絕句 ><五言絕句 > < 作者 >王維 </ 作者 > <標題 >相思 </標題 > < 內容 >紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。</ 內容 > </五言絕句 > <七言絕句 > < 作者 >杜牧 </ 作者 > <標題 >遣懷 </標題 > < 內容 >落魄江湖載酒行,楚腰纖細掌中輕。十年一覺楊州夢,贏得青樓薄倖名。 </ 內容 > </七言絕句 ></唐詩 >

Ex435_2.xsl

Page 54: XML 、 Xpath 轉換 XML 文件

54

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 55: XML 、 Xpath 轉換 XML 文件

55

Xsl:sort ( 排序元素 ) XSLT Script擁有排序元素,能夠指定 XML 元素進行排序。

語法<xsl:sort select="title" order="descending"/> Select 屬性指定排序的元素 Order 屬性指定是由小到大 (ascending) 或由大小 (de

scending) 排序的元素運用於 xsl:for-each 或 xsl:apply-templat

es 的子元素執行

Page 56: XML 、 Xpath 轉換 XML 文件

56

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 57: XML 、 Xpath 轉換 XML 文件

57

Xsl:if (單一條件元素 ) 利用條件式,控制 XSLT 執行資料轉換動作,語

法如下<xsl:if test=條件式 >……<xsl:if>

範例<xsl:if test=“@sales=‘Y’ ”>……<xsl:if> 執行

Page 58: XML 、 Xpath 轉換 XML 文件

58

XSL 資料安排語法 xsl:value-of ( 內容元素 ) xsl:template (範本元素 ) xsl:apply-templates (遞回範本元素 ) xsl:for-each (迴路元素 ) xsl:sort ( 排序元素 ) xsl:if (單一條件元素 ) xsl:choose ( 多條件元素 )

Page 59: XML 、 Xpath 轉換 XML 文件

59

xsl:choose ( 多條件元素 ) 在條件處理上需要多條件,可以使用

Xsl:choose 、 xsl:when 、 xsl:otherwise 語法

<xsl:choose> <xsl:when test=條件式一 > …… </xsl:when> <xsl:when test=條件式二 > …… </xsl:when> <xsl:otherwise> …… </xsl:otherwise> </xsl:choose> 執行

Page 60: XML 、 Xpath 轉換 XML 文件

60

XSL 格式化物件 (FO) XSL工作草案定義了約 56 種格式化物件,描述已格式化

輸出的元素,並分成下列幾類: 編頁及版面格式化物件 區塊 (block) 格式化物件 行內 (Inline) 格式化物件 清單格式化物件 表格格式化物件 鏈結與多元格式化物件 線外 (Out-of Line) 格式化物件

Page 61: XML 、 Xpath 轉換 XML 文件

61

使用 XSL-FO XSL-FO 是一群類似特定且已定義的變

數所組成之展示規範。 一般使用 XSL 格式化物件均是以名稱空間 (Namespace) fo 開始。 fo: xxxxxxfo:basic-link fo:bidi-override fo:block

Page 62: XML 、 Xpath 轉換 XML 文件

62

XML 元素轉換技巧 複製元素 -xsl:copy

語法 :<xsl:copy>…</xsl:copy> 建立 XML 元素

建立元素 xsl:element<xsl:element name=“catalog”>網頁製作 </xsl:element> 輸出結果 : <catalog>網頁製作 <catalog>

建立屬性 xsl:attribute<xsl:element name=“catalog”><xsl:attribute name=“code”>A001</xsl:attribute>網頁製作 </xsl:element> 輸出結果 :<catalog code=”A001”>網頁製作 <catalog>

Page 63: XML 、 Xpath 轉換 XML 文件

<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:copy> <xsl:value-of /> </xsl:copy> </xsl:template>

</xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href=”ex441_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 標題 ="竹里館 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 標題 ="相思 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 </ 內容 > </五言絕句 > <五言絕句 標題 ="春曉 "> < 作者 字號 ="太白 ">李白 </ 作者 > < 內容 > 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 </ 內容 > </五言絕句 > <五言絕句 標題 ="彈琴 "> < 作者 字號 =" 文房 ">劉長卿 </ 作者 > < 內容 > 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。 </ 內容 > </五言絕句 > </唐詩 >

xsl:copy 範例 -1

文件內容直接拷貝到畫面上

王維 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 王維 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 李白 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 劉長卿 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。

Ex441_1.xsl

Page 64: XML 、 Xpath 轉換 XML 文件

<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:for-each select=" 唐詩 / 五言絕句 "> <p> <xsl:copy> <xsl:value-of /> </xsl:copy> </p> </xsl:for-each> </xsl:template> </xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href=”ex441_2.xsl" type="text/xsl"?> <唐詩 > <五言絕句 標題 ="竹里館 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 標題 ="相思 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 </ 內容 > </五言絕句 > <五言絕句 標題 ="春曉 "> < 作者 字號 ="太白 ">李白 </ 作者 > < 內容 > 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 </ 內容 > </五言絕句 > <五言絕句 標題 ="彈琴 "> < 作者 字號 =" 文房 ">劉長卿 </ 作者 > < 內容 > 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。 </ 內容 > </五言絕句 > </唐詩 >

xsl:copy 範例 -2

在 xsl:for-each 中使用 xsl:copy 會使標籤名稱亦顯示在文件上< 五言絕句 > 王維 獨坐幽篁裡,彈琴復長嘯。

深林人不知,明月來相照。 < 五言絕句 > 王維 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 < 五言絕句 > 李白 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 < 五言絕句 > 劉長卿 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。 。

Ex441_2.xsl

Page 65: XML 、 Xpath 轉換 XML 文件

<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <table border="5"> <xsl:for-each select="唐詩 /五言絕句 "> <tr> <xsl:apply-templates/> </tr> </xsl:for-each> </table> </xsl:template> <xsl:template match="*"> <td style="color:red" width="10%"> <xsl:node-name /> </td> <td> <xsl:value-of /> </td> </xsl:template> </xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href=”ex443_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 標題 ="竹里館 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 標題 ="相思 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 </ 內容 > </五言絕句 > <五言絕句 標題 ="春曉 "> < 作者 字號 ="太白 ">李白 </ 作者 > < 內容 > 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 </ 內容 > </五言絕句 > <五言絕句 標題 ="彈琴 "> < 作者 字號 =" 文房 ">劉長卿 </ 作者 > < 內容 > 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。 </ 內容 > </五言絕句 > </唐詩 >

xsl:node-name 範例

xsl:node-name 用於顯示標籤名稱

作者 王維 內容 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 作者 王維 內容 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 作者 李白 內容 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 作者 劉長卿 內容 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。 。

Ex443_1.xsl

Page 66: XML 、 Xpath 轉換 XML 文件

<?xml version="1.0" encoding="BIG5" ?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template> <xsl:element name="title"> <xsl:value-of select=" 唐詩 / 五言絕句 / 作者 " /> <xsl:value-of select=" 唐詩 / 五言絕句 /@ 標題 " /> </xsl:element> <h3> <xsl:value-of select="唐詩 /五言絕句 / 作者 " /> <br/> <xsl:value-of select="唐詩 /五言絕句 /@標題 " /> <br/> <xsl:value-of select="唐詩 /五言絕句 / 內容 "/> </h3> </xsl:template> </xsl:stylesheet>

<?xml version="1.0" encoding="BIG5" ?> <?xml-stylesheet href=”ex444_1.xsl" type="text/xsl"?> <唐詩 > <五言絕句 標題 ="竹里館 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 </ 內容 > </五言絕句 > <五言絕句 標題 ="相思 "> < 作者 字號 ="摩詰 ">王維 </ 作者 > < 內容 > 紅豆生南國,春來發幾枝。勸君多採擷,此物最相思。 </ 內容 > </五言絕句 > <五言絕句 標題 ="春曉 "> < 作者 字號 ="太白 ">李白 </ 作者 > < 內容 > 春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。 </ 內容 > </五言絕句 > <五言絕句 標題 ="彈琴 "> < 作者 字號 =" 文房 ">劉長卿 </ 作者 > < 內容 > 泠泠七絃上,靜聽松風寒。古調雖自愛,今人多不彈。 </ 內容 > </五言絕句 > </唐詩 >

xsl:element 範例

xsl:element 可建立新標籤本例 name=“title” 是將作者與標題 show 在 browser 的 Title 上

王維 竹里館 獨坐幽篁裡,彈琴復長嘯。深林人不知,明月來相照。 。

Ex444_1.xsl

Page 67: XML 、 Xpath 轉換 XML 文件

67

問題與解答