




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第五章 XSL轉(zhuǎn)換XML文檔,學(xué) 習(xí) 目 標 掌握XSL的基本概念 理解XSL的轉(zhuǎn)換原理 掌握XSL文檔的創(chuàng)建和使用方法掌握 掌握XSL模板規(guī)則和調(diào)用方式 熟練掌握不同的方式選擇節(jié)點 掌握XSL常用的控制指令 熟練掌握CSS和XSL的結(jié)合使用,XML關(guān)于文檔瀏覽的基本思想是將數(shù)據(jù)域數(shù)據(jù)的 顯示分別進行定義。這樣,XML的編寫者可以集中 精力與數(shù)據(jù)本身,而不受顯示方式等細枝末節(jié)的影 響。定義不同的樣式表可以使相同的數(shù)據(jù)呈現(xiàn)不同 的顯示外觀,而從適應(yīng)不同的應(yīng)用。,樣式表概述,對于XML文檔的顯示,W3C給出了兩種推薦的 樣式單標準: CSS:它最初是為HTML文檔設(shè)計的,由一系列格式規(guī)則的集合組成
2、。用于控制網(wǎng)頁內(nèi)容的外觀,也可以實現(xiàn)一些特效。同樣也可以控制XML文檔的顯示格式 XSLT:定義的是一份完整的轉(zhuǎn)換規(guī)則,將一份XML文檔徹底地轉(zhuǎn)換成另一份格式文檔,并可以取得對XML文檔里所有數(shù)據(jù)的全部控制權(quán)。,樣式表概述,級聯(lián)樣式單(Cascading Style Sheets,以下簡 稱CSS)是1996年作為把有關(guān)樣式屬性信息如字 體和邊框加到HTML文檔中的標準方法而提出來 的。但是,CSS與XML結(jié)合的確比與HTML結(jié)合 得更好,因為HTML承擔(dān)著CSS標志和HTML標 志之間向后兼容的任務(wù)。一個CSS樣式單就是一 組規(guī)則(rule)。每個規(guī)則給出此規(guī)則所適用的元 素的名稱,以及此規(guī)
3、則要應(yīng)用于那些元素的樣式。,CSS=HTML的樣式表,由于HTML使用預(yù)先確定的標記,因此這些標 記的含義都很好理解:元素定義一段, 元素定義一個標題。瀏覽器知道如何顯示這些元 素。 使用CSS向HTML元素增加顯示格式是一個簡 單的過程:很容易告訴瀏覽器用某種特殊字體或 顏色來顯示各個元素,瀏覽器也很容易理解。,XSL概述,XSL(Extensible Stylesheet Language)是由W3C 專門為XML所制定的,主要是將一份XML文檔轉(zhuǎn)換 為另一份結(jié)構(gòu)化文檔(HTML或XML)。 XSL文檔實際上是XML文檔的一種延伸,是依據(jù) XML制成的樣式語言。通過XSL文檔可以對XML進
4、 行XML進行樣式設(shè)置、計算、整理和排序等。,XSL=XML的樣式表,XML 不使用預(yù)先定義的標簽(我們可以使用 任何喜歡的標簽名),并且這些標簽的意義并不 都那么容易被理解。 為了顯示XML文檔,必須要有一個機制來描述 如何顯示文檔。這些機制之一是CSS,但是XSL 是XML的首選樣式表語言,它要比HTML使用的 CSS復(fù)雜得多。,XSLT:描述如何對一個XML文檔進行轉(zhuǎn)換,用于將一份XML文檔轉(zhuǎn)換成為另一份可瀏覽或可輸出的文檔,并可控制轉(zhuǎn)換后的顯示外觀 Xpath:用來識別,選擇和匹配XML文檔中各種組成部分,進行尋址的語言 XSL-FO(Formatted Object):將一個XSLT
5、轉(zhuǎn)換的結(jié)果變成適用于擁護使用的輸出格式的語言。,XSL的轉(zhuǎn)換原理【重點掌握】,把XML文檔做為一個存儲數(shù)據(jù)的樹來看待,稱為 源樹,XML文檔的根元素和子元素可以看做是樹的 節(jié)點。XSL是根據(jù)需要把這些存放數(shù)據(jù)從XML 樹從提取出來,組成一個新的樹,也就是結(jié)果樹。 結(jié)果樹和源樹是獨立存在的,對結(jié)果樹中的數(shù)據(jù) 進行操作不會影響到源樹中的數(shù)據(jù)。,要執(zhí)行 XSLT 轉(zhuǎn)換,則需要以下組件: XML 文檔 XSLT 樣式表 XSLT 處理器,目前有大量的程序和工具都支持XSLT轉(zhuǎn)換,最常見的有各種瀏覽器,不過它們目前只支持XSLT1.0。除此之外,還有很多XML編輯工具也是支持的。,XSLT樣式表的實質(zhì)只
6、是控制源XML文檔到結(jié)果文檔 之間的轉(zhuǎn)換關(guān)系,它本身并不能進行轉(zhuǎn)換,轉(zhuǎn)換工 作由處理器完成。 XSLT處理器首先根據(jù)要找的節(jié)點在源樹中尋找,提 取到數(shù)據(jù)之后,就到XSLT文檔中找到與這個節(jié)點匹 配的樣式定義,按照定義好的樣式顯示數(shù)據(jù),形成 一個新的文檔樹。,表5-1 XSL構(gòu)造的文檔樹的節(jié)點類型, 韓軍 30 男 喜歡旅游和聽音樂 馬紅波 35 男 喜歡足球和讀書 孫靜 20 女 喜歡演講和跑步 ,注意:,XSL所認為的根節(jié)點和XML根節(jié)點不同, XSL所認為的根節(jié)點是XML文檔本身,而 XML文檔的根節(jié)點是XSL所認為的跟根節(jié) 點的子節(jié)點之一.,提問:XSL為什么不直接將XML根元素當(dāng)做根元
7、素呢?,回答:一份XML文檔除了XML根元素之外,還有 其他的內(nèi)容,比如說處理指令和根元素之外的注 釋,這些內(nèi)容都不在XML根元素之內(nèi)。如果XSL 直接使用XML根元素作為根元素,則無法訪問到 處理指令和根元素之外的注釋。 如果XSL直接使用XML文檔作為根元素,就 可以非常方便地訪問到處理指令和根元素之外的 注釋。,第一個XSLT例子,應(yīng)用XSLT樣式單的處理指令,XML聲明指令,Stylesheet作為XSLT的根元素,根模板匹配,根模板的標記匹配模式必須是“/”, XSL處理器總是從根模板開始實施XSL變換的。,樣式表單的是擴展名為.xsl的文本文件,它有自己獨特的XSL標記. XSL樣
8、式表單必須有XML聲明,與XML文檔有著相同的編碼 XSL的根標記 在XSL標準中,定義了XSL的命名空間是/1999/XSL/Transform XSL樣式表單文件是由若干個稱作模板規(guī)則的XSL標記 組成的,作為根元素stylesheet的子元素。, 歡迎新同學(xué) 歡迎來自五湖四海的同學(xué),來我校學(xué)習(xí) , 模板內(nèi)容 ,整份XML文檔對應(yīng) 于XML根節(jié)點,該模板匹配 XML文檔根節(jié)點,XSL模板【重點掌握】,XSL樣式表單是由一個或多個被稱為“模板”的 規(guī)則集組成的,每個模板都包含了與指定節(jié)點相 匹配的應(yīng)用規(guī)則。 模板規(guī)則包含兩個部分:模式(pattern)和模 板
9、(template),模式用于在源文檔中匹配(定 位)節(jié)點,模板定義節(jié)點的處理機制,通過模板 的實例化來形成結(jié)果樹的一部分。,XSL模板規(guī)則,XSLT樣式表單是擴展名為.xsl的文本文件。它 的基本語法結(jié)構(gòu)如下所示:, . . . ,XML聲明,stylesheet做為XSL樣式表單的 根標記,聲明了XSL樣式表,XSL的命名空間,XSL模板規(guī)則,模板標記的語法格式為:,模板內(nèi)容,用來為XML元素定義特定的模板,每一個模板規(guī)則都是一個 元素。它可以由兩個父標記和,子標記有很多。 模板的標記中必須要有屬性match,該屬性是一個特殊的字符串,稱為模板的標記匹配模式。Match屬性的作用是使模板和
10、XML元素相匹配,即從XML文檔中的指定標記處開始尋找和提取數(shù)據(jù)。match屬性值是一個Xpath表達式。如果沒有為match設(shè)置屬性值,表示從當(dāng)前的根元素開始查找和提取數(shù)據(jù),其默認值為“/”。 一個XML元素對應(yīng)一個特定的模板,該XML的顯示樣式由模板內(nèi)容決定,一份XSL文檔本質(zhì)上通常由多個模板規(guī)則組成,這些 模板由元素定義對哪些XML節(jié)點,應(yīng)用 怎樣的模板進行轉(zhuǎn)換。 哪些XML節(jié)點:由元素的match屬性指定 怎樣的模板:元素內(nèi)的內(nèi)容就是模板 確定了對某個XML節(jié)點該應(yīng)用到哪個模板之后,就非常 簡單了:直接用模板內(nèi)容替換該XML節(jié)點即可。,表明在這里定義了一個樣式表,并給出了域的聲明。在這
11、里需要注意,XSL樣式表根標記 的名稱必須是stylesheet,如果想實現(xiàn)XSL變換,根元素必須定義命名空間,version屬性 是必需的。, ,根模板匹配,根模板的標記匹配模式必須是“/”, XSL處理器總是從根模板開始實施XSL變換的。,“歡迎詞”元素模板匹配規(guī)則,嵌入到XSL中的HTML,嵌入到XSL文件中的HTML標記也必須是格式良好的, 應(yīng)該注意下面幾種情況: 所有的標記都必須封閉 不允許有交叉的標記 字符匹配:HTML的開始標記和結(jié)束標記在大小寫的格式 上必須保持一致 設(shè)置屬性 屬性值必須用單引號或雙引號括起來 使用單根 在XSL文件中不允許把作為唯一的頂層元素省略。 更少的內(nèi)建
12、實體,使用apply-templates處理子節(jié)點【重點掌握】, ,apply-templates用于通知XSLT使用模板轉(zhuǎn)換子節(jié)點,通常作為模板內(nèi)容使用; apply-templates總在XML結(jié)構(gòu)樹的“上下文”中; 例子中位于match=“/”的之內(nèi),因此它的上下文就是XML文檔,它通知XSLT轉(zhuǎn)換XML文檔包含的每個元素,也就是處理指令和 1. 轉(zhuǎn)換XML文檔內(nèi)的處理指令元素,沒有找到與其匹配的模板定義,結(jié)束對處理指令的轉(zhuǎn)換 2 轉(zhuǎn)換XML文檔的根元素,找到與其匹配的板定義。接下來執(zhí)行的處理非常簡單:用對應(yīng)的模板內(nèi)容逐項代替節(jié)點集中每個子節(jié)點。,元素和元素是 XSLT中最常見,最重要的
13、兩個元素。經(jīng)過上面的 介紹,可以歸納出它們的功能: :定義一個模板替代XML文檔中的指定元素 :依次處理當(dāng)前節(jié)點集內(nèi)的每個子節(jié)點,用對應(yīng)的模板內(nèi)容逐項替代,模板帶有標記實際上有兩 種形式 不帶select屬性的模板調(diào)用標記,依次處理當(dāng)前節(jié)點集內(nèi)每個子節(jié)點 有條件的模板調(diào)用標記,只處理符合標記匹配模式的子節(jié)點, 張懷法 30 1200.00 馬東順 28 900.00 王玉強 32 2500.00 , ,第一個模板規(guī)則匹配XML文檔,并對其下所 有子元素依次進行處理,第二個模板規(guī)則匹配XML文檔中 元素,并對其下所有子元素依次進行處理,第三個模板規(guī)則匹配XML文檔中元素 ,并對其下的姓名節(jié)點進行
14、處理, 我的愛好 下面開始處理favorite-list節(jié)點 下面開始處理item節(jié)點 完全靜態(tài)的內(nèi)容 ,使用value-of 輸出節(jié)點內(nèi)容【重點掌握】,XSLT提供了一個元素來輸出 XML節(jié)點的內(nèi)容,使用該元素時可以指定如下兩 個屬性: select:必填屬性,用來指定一個表達式,該表達式對應(yīng)的內(nèi)容將被轉(zhuǎn)換成字符串然后輸出(本質(zhì)上是以該字符串創(chuàng)建一個文本節(jié)點然后輸出) disable-output-escaping:可選屬性,指定輸出文本內(nèi)容時是否禁用轉(zhuǎn)義,轉(zhuǎn)換包含子元素的節(jié)點,如果使用元素來轉(zhuǎn)換包含子元素 的節(jié)點,它會采用深度優(yōu)先的法則,將每個文本 節(jié)點所包含的字符串依次累加成一個字符串返
15、回。, ,轉(zhuǎn)換屬性,當(dāng)使用元素轉(zhuǎn)換屬性時,它會直 接輸出該屬性的文本值。, ,XSLT提供的是一個功能非常強大 的元素。從功能上來看,它有點類似于編程語言 的輸出語句,而且不僅可以轉(zhuǎn)換文本節(jié)點的內(nèi)容, 還可以轉(zhuǎn)換節(jié)點的屬性和包含子元素的節(jié)點。,匹配節(jié)點的模式,匹配XML文檔根:使用斜線匹配,如select=“/” 匹配元素節(jié)點:最為常見的情形,如select=“par”就是匹配當(dāng)前節(jié)點里所有的par節(jié)點 匹配屬性:匹配屬性需要增加符號,例如select=“class”匹配當(dāng)前節(jié)點的所有所有class屬性(不是匹配有class屬性的子節(jié)點) 匹配子節(jié)點:使用斜線( /)來匹配子節(jié)點,例如sele
16、ct=“olist/item”可以匹配當(dāng)前節(jié)點集下父節(jié)點olist的所有item節(jié)點,匹配節(jié)點的模式,匹配后代節(jié)點:使用雙斜線(/)可匹配后代節(jié)點,例如select=“appendix/para”可匹配當(dāng)前節(jié)點集下祖先節(jié)點為appendix的所有para節(jié)點 使用星號(*)作為通配符:上面的幾種形式都可以使用星號作為通配符。例如select=“*”表示匹配當(dāng)前節(jié)點下的所有節(jié)點; select=“*”表示匹配當(dāng)前節(jié)點下的所有屬性 使用點號(.)匹配當(dāng)前節(jié)點:單獨一個點號可代表當(dāng)前節(jié)點,例如select=“.”匹配當(dāng)前的任何節(jié)點,匹配節(jié)點的模式,使用豎線(|)組合多個表達式:如果希望匹配多種類型的
17、節(jié)點,可以使用|組合多個表達式。例如select=“chapter|appendix”可以同時匹配當(dāng)前節(jié)點集里的chapter和appendix節(jié)點 使用對表達式增加限定:里可以指定一個布爾表達式,用于對前面介紹的表達式進行限定。如select=“divclass=“appendix”,XSL控制指令,XSL提供了、 和等4個元素用于分支處理,其中 元素可以單獨使用,作用類似于Java里if語句 作用。 而、和元 素應(yīng)結(jié)合使用。類似于Java里if,else if和else的作 用。,簡單判斷指令,使用元素時可以指定一個test屬性,其值 是一個布爾表達式,該元素的內(nèi)容是模板內(nèi)容, 當(dāng)test
18、屬性指定的布爾表達式為true時,計算輸出 該元素包含的模板內(nèi)容,否則不會計算輸出該元 素包含的模板內(nèi)容、, 模板內(nèi)容 , xsl元素 , 漲價 降價 ,匹配購物清單/商品/商品價格 的模板規(guī)則: 如果當(dāng)前節(jié)點的有漲價屬性,此元素內(nèi)容為藍色 如果當(dāng)前節(jié)點的有降價屬性,此元素內(nèi)容為綠色,多條件判斷指令,在元素中只有兩種選擇,而 就是在多種條件中進行判斷選擇的。 包含了一組元素,在test 屬性中將規(guī)定各種條件,測試時將從上至下依次匹 配直到找到滿足的條件。如果所有的元 素都不滿足條件,則應(yīng)用元素.,多條件判斷指令, 內(nèi)容 . 內(nèi)容 內(nèi)容 ,從第一個開始尋找,只有其中一個滿足條 件,就執(zhí)行下面的語
19、句,執(zhí)行完后跳出當(dāng)前的語句塊。 否則,繼續(xù)向后尋找是否有和test條件相匹配的條件, 沒有的話,就執(zhí)行最后一個默認語句,默認語句主要是 為應(yīng)對不可預(yù)料情況的發(fā)生而設(shè)置的。, 分 分 分 ,循環(huán)處理指令【選講】,XSLT提供了元素進行循環(huán)控制, 使用元素必須指定一個select屬性, 其值是一個Xpath表達式,表示一個節(jié)點集。 元素將依次迭代節(jié)點集內(nèi)的每 個節(jié)點,其中正在被迭代處理的節(jié)點就會變成當(dāng) 前節(jié)點,我們通常先用 指 定同名標記,再用 來提取各個同名的標記。 ,內(nèi)容 , 名稱: 0 類型: 0 價格: 0 優(yōu)點: ,元素顯示指定迭代轉(zhuǎn)換節(jié)點集中的 每個節(jié)點,而元素則實際 上具有隱式的迭代
20、功能。,排序控制,它需要放在 和 元素里使用,用于對被迭代處理的元素進行排序。 使用元素可以指定如下幾個屬性: select:用于指定一個Xpath表達式,該表達式所表示的節(jié)點將作為排序關(guān)鍵字 lang:用于指定排序順序的語言字母表。如果未指定lang屬性值,將根據(jù)系統(tǒng)環(huán)境確定語言 order:指定是使用“升序”(用ascending屬性值)還是“降序” (用decending屬性值),case-order:當(dāng)date-type屬性值為text時,該屬性指定大寫字母應(yīng)該在小寫字母之前還是之后。該屬性只能j接受upper-first(大寫字母排在前面)和low-first(小寫字母排在前面)兩個
21、值。 date-type:指定字符串的數(shù)據(jù)類型。如果沒有指定數(shù)據(jù)類型,將使用表達式的類型作為默認類型。只能接受如下3個屬性值: text:指定排序關(guān)鍵字應(yīng)按照字母順序排序 number:指定排序關(guān)鍵字應(yīng)轉(zhuǎn)換為數(shù)字,然后根據(jù)數(shù)值進行排序 Qname: 展開為擴展名稱,標識該數(shù)據(jù)類型,輸出內(nèi)容的排序,按大小寫排序 按字母順序排序 按數(shù)據(jù)類型排序,在 和元素里可 以使用多個元素,其中第1個 元素的select屬性表示的節(jié)點代表首要關(guān)鍵字,第 2個元素的select屬性表示的節(jié)點代表次 要關(guān)鍵字.依次類推。, ,命名空間/TR/WD-xsl 不支持標記,練習(xí), TCL彩電 1200 海爾洗衣機 2300 格力空調(diào) 6700 ,第一步:確定從源樹中提取哪些結(jié)點信息?,頁面提取 和節(jié)點,如果節(jié)點的內(nèi)容2000,顯 示成為紅色,否則為藍色。, 電器價格參照表(紅色字體為優(yōu)惠價) ., . 2000 價格 ,XSL應(yīng)用實例,XML文件的所有表現(xiàn)信息多發(fā)放在了XSL樣式 表單文件當(dāng)中。XSL文件全權(quán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美麗寶雞考試題及答案
- 企業(yè)商標保護課件教學(xué)
- 長期稅務(wù)籌劃方案
- 跟蹤審計實施方案
- 車輛抵押擔(dān)保解除合同范本
- 消防項目維保方案
- 黨課宣傳課件圖片大全
- 言語康復(fù)家長培訓(xùn)
- 油廠設(shè)計方案模板
- 2026版《全品高考》選考復(fù)習(xí)方案物理01 第9講 曲線運動 運動的合成與分解 含答案
- GB/T 15298-1994電子設(shè)備用電位器第一部分:總規(guī)范
- 泥水平衡盾構(gòu)簡介課件
- 新教科版六下科學(xué)4-6《生命體中的化學(xué)變化》教案
- 2023高中學(xué)業(yè)水平合格性考試歷史重點知識點歸納總結(jié)(復(fù)習(xí)必背)
- 自然指數(shù)NatureIndex(NI)收錄的68種自然科學(xué)類期刊
- 手術(shù)報告審批單
- 《專業(yè)導(dǎo)論光電信息科學(xué)與工程》教學(xué)大綱
- 廣東省湛江市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細
- 煤礦智能化綜采工作面系統(tǒng)運行維護管理制度
- 少兒美術(shù)國畫- 少兒希望 《紫藤課件》
- 建立良好的同伴關(guān)系-課件-高二心理健康
評論
0/150
提交評論