xsl 操作
XSL 指擴(kuò)展樣式表語言(EXtensible?Stylesheet?Language)。
萬維網(wǎng)聯(lián)盟 (W3C) 開始發(fā)展 XSL 的原因是:存在著對(duì)于基于 XML 的樣式表語言的需求。
說白了就是友好的去顯示一個(gè)xml文檔
XSL - 不僅僅是樣式表語言
?
XSL 包括三部分:
XSLT
一種用于轉(zhuǎn)換 XML 文檔的語言。
XSLT 是 XSL 中最重要的部分。
XSLT 用于將一種 XML 文檔轉(zhuǎn)換為另外一種 XML 文檔,或者可被瀏覽器識(shí)別的其他類型的文檔,比如 HTML 和 XHTML。通常,XSLT 是通過把每個(gè) XML 元素轉(zhuǎn)換為 (X)HTML 元素來完成這項(xiàng)工作的。
通過 XSLT,您可以向或者從輸出文件添加或移除元素和屬性。您也可重新排列元素,執(zhí)行測(cè)試并決定隱藏或顯示哪個(gè)元素,等等。
描述轉(zhuǎn)化過程的一種通常的說法是,XSLT 把 XML 源樹轉(zhuǎn)換為 XML 結(jié)果樹。
XPath
一種用于在 XML 文檔中導(dǎo)航的語言。
XSL-FO
一種用于格式化 XML 文檔的語言。
正確的樣式表聲明
? 把文檔聲明為 XSL 樣式表的根元素是 <xsl:stylesheet> 或 <xsl:transform>。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> //聲明在文檔的最前面或者
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">//這兩種格式都可以 任選一種如果我們想訪問XSLT 的元素和屬性,特性什么的,我們必須在文檔頂端聲明 XSLT 命名空間。
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
指向的是xslt的官方命名空間,如果引入和這個(gè)命名空間那就要包含屬性 version="1.0"。
從一個(gè)原始的 XML 文檔開始
我們現(xiàn)在要把下面這個(gè) XML 文檔轉(zhuǎn)換為 XHTML:
<?xml version="1.0" encoding="ISO-8859-1"?> <root><user> <name>張三</name> <age>12</age> <pwd>123</pwd> <sex>男</sex></user> </root> ?創(chuàng)建 XSL 樣式表
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"><html><body><h2>用戶信息</h2><table border="1"><tr bgcolor="#9acd32"><th align="left">用戶名</th><th align="left">密碼</th></tr><xsl:for-each select="root/user"> <tr><td><xsl:value-of select="name"/></td> <td><xsl:value-of select="pwd"/></td> </tr></xsl:for-each></table></body></html> </xsl:template></xsl:stylesheet>把 XSL 樣式表鏈接到 XML 文檔
現(xiàn)在xsl (顯示格式)和xml(數(shù)據(jù))都有了?怎么把他們兩個(gè)鏈接到一起呢
向 XML 文檔添加 XSL 樣式表引用:
<?xml-stylesheet type="text/xsl" href="xsl的文件"?>? 這里我對(duì)咱們上個(gè)例子的xsl簡(jiǎn)要的解釋一下
?
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">//XSL 樣式表由一個(gè)或多套被稱為模板(template)的規(guī)則組成。每個(gè)模板含有當(dāng)某個(gè)指定的節(jié)點(diǎn)被匹配時(shí)所應(yīng)用的規(guī)則。match 屬性的值是 XPath 表達(dá)式(舉例,match="/" 定義整個(gè)文檔)。意思也就是匹配xml文件的(從根開始)<html><body><h2>用戶信息</h2><table border="1"><tr bgcolor="#9acd32"><th align="left">用戶名</th><th align="left">密碼</th></tr><xsl:for-each select="root/user"> //<xsl:for-each> 元素可用于選取指定的節(jié)點(diǎn)集中的每個(gè) XML 元素。select 屬性的值是一個(gè) XPath 表達(dá)式。此表達(dá)式的工作方式類似于定位某個(gè)文件系統(tǒng),在其中正斜杠可選擇子目錄。<xsl:for-each> 元素還可以加過濾<xsl:for-each select="root/user[age='12']"> (意思取的是子節(jié)點(diǎn)當(dāng)中年齡12的)合法的過濾運(yùn)算符::=? (等于) :!= (不等于):< (小于):> (大于) <xsl:sort select="age"/> //如需對(duì)結(jié)果進(jìn)行排序,只要簡(jiǎn)單地在 XSL 文件中的 <xsl:for-each> 元素內(nèi)部添加一個(gè) <xsl:sort> 元素:<xsl:sort select="age"/> <xsl:if test="age > 10"> //如需添加有條件的測(cè)試,請(qǐng)?jiān)?XSL 文件中的 <xsl:for-each> 元素內(nèi)部添加 <xsl:if> 元素test :意思是條件<tr><td><xsl:value-of select="name"/></td> //<xsl:value-of> 元素,<xsl:value-of> 元素用于提取某個(gè)選定節(jié)點(diǎn)的值,并把值添加到轉(zhuǎn)換的輸出流中:select 屬性的值是一個(gè) XPath 表達(dá)式。此表達(dá)式的工作方式類似于定位某個(gè)文件系統(tǒng),在其中正斜杠可選擇子目錄。當(dāng)我在 <xsl:for-each> 元素可省略從根節(jié)點(diǎn)找直接在 <xsl:for-each> 元素下面找<td><xsl:value-of select="pwd"/></td> </tr></xsl:if></xsl:for-each></table></body></html> </xsl:template></xsl:stylesheet> 還可以添加多重判斷<?xml version="1.0" encoding="iso-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><h2>用戶信息</h2><table border="1"><tr bgcolor="#9acd32"><th align="left">用戶名</th><th align="left">密碼</th></tr><xsl:for-each select="root/user"><tr><xsl:choose> <xsl:when test="age > 20"> //多重判斷 判斷我的年齡大于20那么就在醒目右面加一個(gè)男人<td><xsl:value-of select="name"/><h6>男人</h6></td></xsl:when><xsl:when test="age < 20 "><xsl:value-of select="name"/><h6>男孩</h6>//如果是20以下加一個(gè)男孩</xsl:when><xsl:otherwise> //入伙上面兩種都不是就加一識(shí)別不了<xsl:value-of select="name"/><h6>識(shí)別不了年齡</h6></xsl:otherwise><td><xsl:value-of select="pwd"/></td></tr></xsl:otherwise></xsl:choose></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>XPath 語法
XPath 使用路徑表達(dá)式在 XML 文檔中選取節(jié)點(diǎn)。節(jié)點(diǎn)是通過沿著路徑或者 step 來選取的。
下面列出了最有用的路徑表達(dá)式:
nodename:選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)。 / : 從根節(jié)點(diǎn)選取。 // :從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。 . :選取當(dāng)前節(jié)點(diǎn)。:選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。 .. :選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) @ : 選取屬性。總結(jié)
- 上一篇: 如何避免动态字体Font Texture
- 下一篇: 准备工作(正则表达式学习)