Download presentation
Presentation is loading. Please wait.
1
第 3 章 XML文件的轉換 –XSLT與XPath
2
XSLT與XPath的簡介 - 什麼是XSLT
XSLT(XSL Tranform)本身就是一種XML文件,用於轉換XML文件。 XSLT原先是XSL(eXtensible Stylesheet Language ,譯為可延伸樣式語言)的一部份。 XSL可分為轉換(XSLT)與格式化(FO)兩個部份,整個處理XML文件的過程,如下圖所示。
3
XSLT與XPath的簡介 - XPath語法
為方便讀者檢視本節XPath語法範例的執行結果,本書隨書光碟的ch3範例資料夾XPath子資料夾下,將提供show.htm檔。
4
XSLT與XPath的簡介 - XPath語法
中樞::節點測試[條件式] 中樞 用於定義XML文件中,欲擷取節點的路徑敘述。下表為各中樞(Aixs)關鍵字意義的說明,更進一步的說明請參考3-2-3節。
5
XSLT與XPath的簡介 - XPath語法
6
XSLT與XPath的簡介 - XPath語法
節點測試 用於測試欲套用節點的敘述,通過測試之節點將被擷取。下表將介紹各節點測試(Node-Test),詳細說明請參考3-2-4節。 條件式 用於篩選擷取節點的條件式。
7
XSLT與XPath的簡介 - XPath語法
取得文件元素的根節點–『/』:若將『/』符號運用於第一個字元時,代表XML文件的文件元素(根元素)的上一層節點,這個節點除包含文件元素外,還將包含文件宣告以及DTD宣告。
8
XSLT與XPath的簡介 - XPath語法
串連符號–『/』:若欲串連數個XPath語法,漸漸縮小篩選XML文件中資料的範圍,則需運用『/』符號。常見的XPath語法將如下所示。 中樞::節點測試[條件式]/中樞::節點測試[條件式]/…
9
XSLT與XPath的簡介 - XPath語法
10
XSLT與XPath的簡介 - XPath語法
11
XSLT與XPath的簡介 - XPath語法
以下是一個用於篩選book2.xml文件中節點的XPath敘述,意義為『取得目前節點下子節點(child)中booklist(節點測試)節點』。由於XPath預設目前節點為最上層的節點,其含意就成了『取得文件節點下子節點(child)中的booklist(節點測試)節點』。 child::booklist
12
XSLT與XPath的簡介 - XPath語法
篩選範圍如下:
13
XSLT與XPath的簡介 - XPath語法
以下敘述將利用『/』符號在前述XPath後,增加另一段XPath敘述,將可指定從篩選結果一,再篩選出第2個book元素。 child::booklist/child::book[2] 從book2.xml篩選出來的結果如下所示。
14
XSLT與XPath的簡介 - XPath語法
篩選範圍如下:
15
XSLT與XPath的簡介 - XPath語法
XPath所謂的Axes(中樞)觀念,就是利用已經完成預設參照路徑的關鍵字建立XPath的參照路徑。
16
XSLT與XPath的簡介 - XPath語法
下表為各Axis(Axes為複數型態)關鍵字的意義。
17
XSLT與XPath的簡介 - XPath語法
18
XSLT與XPath的簡介 - XPath語法
節點測試:
19
XSLT與XPath的簡介 - XPath語法
條件式篩選:
20
XSLT與XPath的簡介 - XPath語法
指定順序取得元素: 若欲取得XML文件內的一個元素時,可利用指定某元素在樹狀結構之階層位置的方式達成。欲指定元素的順序時,可使用『[]』運算子,並以『[順序]』之語法完成指定。以下敘述將從book.xml取得booklist元素中,第2個book元素。 /booklist/book[2]
21
XSLT與XPath的簡介 - XPath語法
範例如下:
22
XSLT與XPath的簡介 - XPath語法
語法範例:
23
XSLT與XPath的簡介 - XPath語法
『|』運算子稱之為聯集運算子,用於聯集兩條件式所篩選出的節點。 以下範例由兩條件式組成,分別篩選出sale屬性值為Y的book元素,與price子元素值小於600的book元素,然後以『|』運算子聯集兩條件式篩選出的元素。 = "Y"] | //book[price < 600]
24
XSLT與XPath的簡介 - XPath函數
節點集函數(Node-set Function) 字串函數(String Function) 布林函數(Boolean Function) 數值函數(Number Function)
25
XSLT與XPath的簡介 - XPath函數
節點集函數(Node-set Function)
26
XSLT與XPath的簡介 - XPath函數
字串函數(String Function)
27
XSLT與XPath的簡介 - XPath函數
布林函數(Boolean Function)
28
XSLT與XPath的簡介 - XSLT樣版運作觀念
29
XSLT與XPath的簡介 - XSLT的運作方式
Server端執行
30
XSLT與XPath的簡介 - XSLT的運作方式
Client端執行
31
XSLT與XPath的簡介 - XSLT的運作方式
32
XSLT與XPath的簡介 - XSLT的運作方式
33
XSLT與XPath的簡介 - XSLT文件的建立與使用
34
XSLT與XPath的簡介 - XSLT文件的建立與使用
XSLT文件的文件元素為xsl:stylesheet元素,在該元素中,必須利用xmlns定義使用的名稱空間為『
35
XSLT與XPath的簡介 - XSLT文件的建立與使用
<xsl:template>元素用於定義XSLT文件內的樣版,這些樣版套用於特定節點執行轉換動作: <xsl:template match="模式" name="樣版名稱" mode="樣式" priority ="等級" > …… </xsl:template>
36
XSLT與XPath的簡介 - XSLT文件的建立與使用
<xsl:template>元素用於定義XSLT文件內的樣版,這些樣版套用於特定節點執行轉換動作: <xsl:template match="模式" name="樣版名稱" mode="樣式" priority ="等級" > …… </xsl:template> 以下敘述所定義的樣版,將套用於根元素。
37
XSLT與XPath的簡介 - XSLT文件的建立與使用
若定義一個不執行任何動作的樣版時,語法如下: <xsl:template match=模式name=樣版名稱 mode=樣式priority =等級 /> 下表為此元素與其他元素相關關係的說明。
38
XSLT與XPath的簡介 - XSLT文件的建立與使用
<xsl:value-of>元素用於從XML文件中,取得元素的值,語法如下: <xsl:value-of select = "選取敘述"/> 或 <xsl:value-of select = "選取敘述"></xsl:value-of> 以下敘述將取得XML文件中,messages元素的message子元素之值。
39
XSLT與XPath的簡介 - XSLT文件的建立與使用
下表為此元素與其他元素相關關係的說明。
40
XSLT與XPath的簡介 - XSLT文件的建立與使用
XML文件若指定欲套用的XSLT文件時,需在前言(prolog)中定義,語法如下: <?xml-stylesheet type="text/xsl“ href="XSLT文件名稱與路徑"?>
41
XSLT與XPath的簡介 - XSLT文件的建立與使用
將template.xml開啟於瀏覽器內時,畫面如下:
42
XSLT與XPath的簡介 - 多樣版XSLT文件的建立
以下XSLT文件內,將定義三個樣版,以進行XML文件的轉換。
43
XSLT與XPath的簡介 - 多樣版XSLT文件的建立
套用此XSLT文件的XML文件內容如下:
44
XSLT與XPath的簡介 - 多樣版XSLT文件的建立
利用瀏覽器開啟mtemplate.xml文件後,結果如下圖所示。
45
XSLT與XPath的簡介 - 多樣版文件的運作
在mtemplate.xsl檔,則定義了三個樣版,分別套用於根節點、author元素與文字節點元素。 XML文件套用XSLT樣版的過程將先從套用於根元素的樣版開始處理,這類樣版本書將稱為主樣版。 主樣版內可以利用XPath語法,配合各種XSLT元素,操作根元素下的所有元素,例如:可以利用3-5-4節的xsl:value-of元素,取得XML文件中節點的值。
46
XSLT與XPath的簡介 - 多樣版文件的運作
mtemplate.xsl檔的主樣版內,將利用<xsl:apply-templates>元素,以遞迴(recursive)方式處理根元素下,booklist元素book子元素的所有元素,並尋找XSLT文件中是否定義套用於節點之樣版,『是』則套用。 有關<xsl:apply-templates>元素的更進一步說明,請參考3-6-3節的內容。
47
XSLT與XPath的簡介 - 多樣版文件的運作
mtemplate.xsl檔除了套用於根元素的主樣版外,還有套用於price元素與title元素的樣版。這兩個樣版將僅取得元素的值,並分別利用『[]』與『{}』標示。
48
XSLT與XPath的簡介 - 多樣版文件的運作
另一個空樣版,用於處理所有文字節點(沒有子元素只包含資料的節點),有關此樣版的目的請參考下一節最後的說明。
49
XSLT與XPath的簡介 - xsl:apply-templates元素
<xsl:apply-template>元素可控制XSL處理器,在目前XSLT文件內,尋找適當樣版套用於節點上。語法如下: <xsl:apply-templates select="模式" mode="樣式"/> 或 …… </xsl:apply-template>
50
XSLT與XPath的簡介 - xsl:apply-templates元素
若有兩樣版同時可套用時,將採用優先等級較高者,樣版的優先等級設定於<xsl:template>元素的priority屬性。 若等級亦相同時,則以XSLT文件中,較後被定義的樣版優先。 若搜尋至文字節點,仍沒有適合節點套用的樣版時,則XSLT將會直接輸出該元素的值。 當XSLT文件中,已提供套用某節點的樣版時,<xsl:apply-templates>將不再處理該節點下的子節點,這些子節點將交由套用的樣版處理。 若<xsl:apply-template>元素的select屬性,未被設定時,則樣版所套用之節點下的所有節點,均會被處理。
51
XSLT與XPath的簡介 - xsl:apply-templates元素
<xsl:template match="text()" /> mtemplate.xsl檔內為了避免XSLT處理器在找不到節點可套用的樣版時,直接輸出節點值,因此,第20列將運用上述語法,建立一個空樣版,處理文字節點。
52
XSLT的流程控制元素 - xsl:for-each元素
<xsl:for-each>元素可處理由XPath語法篩選出的所有元素,語法如下: <xsl:for-each select="模式"> …… </xsl:for-each> <xsl:for-each>元素的運作方式,與程式的迴圈觀念相似。
53
XSLT的流程控制元素 - xsl:for-each元素
以下敘述為一處理book元素的樣版,每個book元素下擁有數個元素,將利用<xsl:for-each>元素,配合<xsl:value-of>元素,列出book元素內所有元素(./*)的名稱(name(.))與內容(.)。
54
XSLT的流程控制元素 - xsl:if元素
<xsl:if>元素用於利用條件式控制XSLT執行資料轉換動作,語法如下: <xsl:if test=條件式> …… </xsl:if> 以下敘述將判斷元素名稱是否為『author』,『是』則取得該元素值。
55
XSLT的流程控制元素 - xsl:choose元素、xsl:when元素與xsl:otherwise元素
<xsl:if>元素一次僅能運用一個條件式,進行判斷動作。 若欲進行多條件式的判斷時,則須使用<xsl:choose>、<xsl:when>與<xsl:otherwise>元素,語法如下: <xsl:choose> <xsl:when test=條件式一> …… </xsl:when> <xsl:when test=條件式二> <xsl:otherwise> </xsl:otherwise> </xsl:choose>
56
排序與文字元素 - xsl:sort元素XSLT的流程控制元素
將<xsl:sort>元素運用於<xsl:for-each>元素與<xsl:apply-templates>元素中,以指定資料的排序方式。語法如下: <xsl:sort select = 排序元素 data-type = 資料型別 order = 排序方式 lang = 使用語言 case-order = 大小寫優先順序/> 以下敘述將指定套用樣版時,以price元素之值,進行遞減排序。
57
排序與文字元素 - xsl:sort元素XSLT的流程控制元素
<xsl:text>元素用於指定資料,以純文字的方式輸出。使用語法如下: <xsl:text disable-output-escaping=取消跳脫功能> …… </xsl:text> 以下敘述將利用<xsl:text>元素讓『<』符號以字元方式輸出,而不轉換為『<』。
58
排序與文字元素 - 樣版函數的使用 建立樣版函數需運用<xsl:template>元素,並將函數名稱設定給name屬性。
以下敘述將宣告一個名為book的樣版函數。 <xsl:template name="book"> …… </xsl:template> 呼叫樣版函數時,必須使用<xsl:call-template>元素,語法如下: <xsl:call-template name=樣版函數名稱> </xsl:call-template>
59
排序與文字元素 - 樣版函數的使用 定義與呼叫樣版函數時,欲定義參數必須使用<xsl:param>元素,使用語法如下:
<xsl:param name=參數名稱 select=模式> </xsl:param> 或 <xsl:param name=參數名稱 select=模式/> 以下敘述將在呼叫book樣版函數時,篩選出book元素與serialbook/book元素,做為booknode參數。
60
排序與文字元素 - 樣版函數的使用 而在book樣版函數中,將利用<xsl:param>元素,宣告該樣版函數所接受的參數,而欲使用傳入的參數時,必須在參數名稱前加上『$』符號。
61
用於建立元素的XSLT元素 - XML文件間的轉換(output元素的使用)
運用XSLT將XML文件轉換成另一份XML文件時,Microsoft Parser將預設輸出如下的XML文件宣告。 <?xml version="1.0" encoding="UTF-16"?> 若欲自訂時,則可利用<xsl:output>元素,將omit-xml-declaration屬性設定為yes,取消預設之XML文件宣告的輸出,如下所示。 <xsl:output omit-xml-declaration="yes"/> 然後利用<xsl:text>元素,建立XML文件宣告。 <xsl:text disable-output-escaping="yes"> <?xml version="1.0" encoding="Big5"?> </xsl:text> 上述敘述將輸出的XML文件宣告如下:
62
用於建立元素的XSLT元素 - xsl:processing-instruction元素
<xsl:processing-instruction>元素用於在轉換後的XML文件中,建立處理命令元素。語法如下: <xsl:processing-instruction name = 處理命令名稱> …… </xsl:processing-instruction> 以下敘述將建立一個定義轉換後XML文件之XSLT文件的處理區塊元素。
63
用於建立元素的XSLT元素 - xsl:element與xsl:attribute元素
<xsl:element>元素用於在輸出的XML檔中,建立元素。語法如下: <xsl:element name=元素名稱> …… </xsl:element> 通常在<xsl:element>元素中,可運用直接鍵入值,或透過<xsl:value-of>元素從XML文件取得值的方式,定義欲建立元素的值。 運用<xsl:attribute>元素定義元素的屬性之語法如下: <xsl:attribute name=元素名稱> </xsl:attribute>
64
用於建立元素的XSLT元素 - xsl:element與xsl:attribute元素
以下敘述將建立一個名為book的元素,且該元素擁有price與author兩個屬性。Book元素之元素值與屬性值,將分別利用<xsl:value-of>元素,選取自price、author、title。
65
用於建立元素的XSLT元素 - xsl:comment元素
<xsl:comment>元素用於在輸出的XML檔中,建立註解。語法如下: <xsl:comment> …… </xsl:comment> 以下敘述將在轉換後的XML文件中,以『書籍清單』字串,建立註解文字。 <xsl:comment>書籍清單</xsl:comment>
66
用於建立元素的XSLT元素 - <xsl:copy>元素
<xsl:copy>元素從XML文件,複製目前元素至輸出的XML檔中。語法如下: <xsl:copy>……</xsl:copy> 但是<xsl:copy>元素僅會複製元素的名稱、內容與名稱空間,不會複製元素的屬性與子元素。
67
用於建立元素的XSLT元素 - xsl:copy-of元素
<xsl:copy-of>元素將從XML文件,運用設定給select屬性的XPath敘述,篩選出目前元素下的元素,然後複製。 與<xsl:copy>元素不同的,<xsl:copy-of>元素將完整複製元素,包含元素的名稱、屬性、資料、名稱空間…等。 語法如下: <xsl:copy-of select="模式"/> <xsl:copy-of>元素僅會複製元素的名稱、內容與名稱空間,不會複製元素的屬性與子元素。
Similar presentations