XSL转换XML
XSL轉(zhuǎn)換XML
XSL概述
XSL(Extensible Stylesheet Language)是可擴展樣式表語言。
包含
什么是XSLT?
- XSLT => (Extensible Stylesheet Language Transformations)
- XSLT是XSL中最重要的部分
- XSLT可以將XML文檔轉(zhuǎn)化為另外一種XML文檔
- XSLT可以使用XPath在XML文檔中進行導(dǎo)航
- XPath是一個W3C標準
XSL的意義
- 將文檔內(nèi)容和表現(xiàn)形式分離
- 在不同的應(yīng)用之間傳輸數(shù)據(jù)
XSLT和CSS的比較
- CSS不能重新排序文檔中的元素
- CSS不能判斷和控制哪個元素被顯示,哪個不行
- CSS不能對文檔的內(nèi)容進行操作
XSLT的應(yīng)用包括
- 查看為目的添加元素怒
- 從現(xiàn)在內(nèi)容創(chuàng)建新的內(nèi)容
- 從XML文檔中提取信息
- 在不同的XML字典或模型之間進行轉(zhuǎn)換
- 將XML文檔轉(zhuǎn)化為HTML
在XML中使用XSL
<?xml version="1.0" ?> <xsl:stylesheet type="text/xsl" xmlns:xsl="http://www.w3.org/TR/1.xsl">... </xsl:stylesheet>XSL模板
- 模板是XSLT中最重要的概念之一
- XSLT文件是由一個一個模板構(gòu)成的
- 模板分為兩部分,匹配模式和執(zhí)行
- 匹配模式定義什么節(jié)點會被當(dāng)做模板處理,執(zhí)行則定義輸出的是什么格式
xsl:template 作用是用來定義一個模板,match是匹配模板的格式。
標記匹配模式就是描述該模板適用于那些標記,采用的是XPath表達式。
XPath
XPath是一門在XML文檔中查找信息的語言。可以對元素和屬性進行遍歷。
- XPath 使用路徑表達式在XML文檔中進行導(dǎo)航
- XPath 包含一個標準函數(shù)庫
- XPath 是 XSLT 中的主要元素
- XPath 是一個 W3C標準
| / | 從根節(jié)點選取 |
| // | 從匹配選擇的當(dāng)前節(jié)點選擇文檔節(jié)點,不考慮位置 |
| . | 選擇當(dāng)前節(jié)點 |
| … | 選擇當(dāng)前節(jié)點的父親節(jié)點 |
| @ | 選取屬性 |
例子
| /bookstore | 選取根元素bookstore |
| bookstore/book | 選取所有bookstore的book子元素 |
| //book | 選取所有book元素,不管他們在文檔的哪里 |
| bookstore//book | 選擇屬于bookstore元素后代的bool元素,不管他們在哪里 |
| //@lang | 選取所有名字為lang的屬性 |
| /bookstore/book[1] | 選取屬于bookstore子元素的第一個元素 |
| /bookstore/book[last()] | 選取bookstore子元素的最后一個book元素 |
| /bookstore/book[last()- 1] | 選取bookstore子元素的倒二個元素 |
| /bookstore/book[position()< 3] | 選取最前面的兩個屬于bookstore元素的子元素的book元素 |
| //title[@lang] | 選取所有擁有名為lang屬性的title元素 |
| //title[@lang=‘eng’] | 選取所有擁有名為lang屬性且值為eng的title元素 |
| /bookstore/book[price>35.00] | 選取所有bookstore元素的book元素,且其中的price元素的值必須大于35.00 |
| /bookstore/* | 選取根元素為bookstore下面的所有子元素 |
| //* | 選取文檔的所有元素 |
| //title[@*] | 選取所有帶有屬性的title元素 |
| //book/title | //book/price | 選取所有book子元素的title和price子元素 |
| //title| //price | 選取所有title和price元素 |
| /bookstore/book/title | //price | 選取所有bookstore下面的book元素的title子元素以及所有的price元素 |
習(xí)題
| /bookstore/book | 選取根元素為bookstore下面的所有book子元素 |
| /bookstore/book[0] | 選取根元素為bookstore下面的所有book子元素的第一二 |
| /bookstore/book[price>35]/price | 選取根元素為bookstore下面的所有子元素為price且值大于35的所有子元素price |
其中order-by默認是從大到小排序,如果加上一個’-'表示從小到大
可以用 <xsl:template> 和 <xsl:apply-templates>取代
例如
<xsl:for-each select="catalog/cd"><tr><td><xsl:value-of select="title"/></td><td><xsl:value-of select="artist"/></td></tr> </xsl:for-each>可以用
<xsl:apply-templates select=“catalog/cd”/> <xsl:template match="catalog/cd"><tr><td><xsl:value-of select="title"/></td><td><xsl:value-of select="artist"/></td></tr> </xsl:template>默認情況下,按照節(jié)點在文檔中出現(xiàn)的順序先后進行處理,如果希望改變,可以用xsl:sort元素
order 用來指定排序是升序還是降序,不指定默認升序
<xml:sort order="ascending|descending" select="匹配表達式">... </xml:sort>例如在foreach中使用
<xsl:for-each select="catalog/cd"> <xsl:sort select="artist" /> <tr><td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td></tr> </xsl:for-each>這樣的話,默認按照 artist 升序排序
這個元素用于復(fù)制當(dāng)前節(jié)點標記,什么意思呢
比如有一個這樣的xml
<name>張三</name>在XSLT里面這樣寫
<xsl:apply-templates /> <xsl:template match="*"><xsl:copy><xsl:value-of /></xsl:copy> </xsl:>html輸出結(jié)果會是
<name>張三也就是把節(jié)點的標記輸出了
這個和上面的很類似,可以獲取標記的名字,但是不包括"<“以及”>"
這個元素用于向元素添加屬性
<picture><xsl:attribute name="source"><xsl:value-of select="images/name" /></xsl:attribute> </picture>這個元素用于在輸出文檔中創(chuàng)建元素節(jié)點
<picture><xsl:element name="hello world">圖片是: </xsl:element><xsl:value-of select="images/name" /> </picture>XSL布爾運算
提供三種運算符
上述表達式可以查找所有元素為書名且擁有屬性價格為99元,出版社是IT出版社的所有書籍,并打印出值
上述test可以查找所有PEOPLE元素下?lián)碛袑傩詎ame且值為name的所有元素,并打印出這些元素的值
choose語句有點像是高級語言的switch語句,可以判斷多個。
在XSL中使用CSS
習(xí)題
編寫XSLT文件,將簡歷XML文件轉(zhuǎn)換為HTML文件,并在瀏覽器中查看輸出效果。樣式可與上題中的簡歷類似(如下圖所示),也可自行設(shè)計。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iRgBaVfW-1609259167871)(C:\Users\MSI\AppData\Roaming\Typora\typora-user-images\image-20201227204513439.png)]
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="/"><HTML><HEAD><TITLE>xslt 轉(zhuǎn)化 xml 為 html</TITLE></HEAD><BODY><DIV class="resume">個人簡歷</DIV><DIV><xsl:apply-templates select="resume/profile"></xsl:apply-templates></DIV></BODY></HTML></xsl:template><xsl:template match="profile"><TABLE border="1">...</TABLE></xsl:template> </xsl:stylesheet>總結(jié)
- 上一篇: 密码学实验题_03.3_AES实验_利用
- 下一篇: WPF 实现简易北京地铁效果图