xsl 操作
XSL 指擴展樣式表語言(EXtensible?Stylesheet?Language)。
萬維網聯盟 (W3C) 開始發展 XSL 的原因是:存在著對于基于 XML 的樣式表語言的需求。
說白了就是友好的去顯示一個xml文檔
XSL - 不僅僅是樣式表語言
?
XSL 包括三部分:
XSLT
一種用于轉換 XML 文檔的語言。
XSLT 是 XSL 中最重要的部分。
XSLT 用于將一種 XML 文檔轉換為另外一種 XML 文檔,或者可被瀏覽器識別的其他類型的文檔,比如 HTML 和 XHTML。通常,XSLT 是通過把每個 XML 元素轉換為 (X)HTML 元素來完成這項工作的。
通過 XSLT,您可以向或者從輸出文件添加或移除元素和屬性。您也可重新排列元素,執行測試并決定隱藏或顯示哪個元素,等等。
描述轉化過程的一種通常的說法是,XSLT 把 XML 源樹轉換為 XML 結果樹。
XPath
一種用于在 XML 文檔中導航的語言。
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的官方命名空間,如果引入和這個命名空間那就要包含屬性 version="1.0"。
從一個原始的 XML 文檔開始
我們現在要把下面這個 XML 文檔轉換為 XHTML:
<?xml version="1.0" encoding="ISO-8859-1"?> <root><user> <name>張三</name> <age>12</age> <pwd>123</pwd> <sex>男</sex></user> </root> ?創建 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 文檔
現在xsl (顯示格式)和xml(數據)都有了?怎么把他們兩個鏈接到一起呢
向 XML 文檔添加 XSL 樣式表引用:
<?xml-stylesheet type="text/xsl" href="xsl的文件"?>? 這里我對咱們上個例子的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="/">//XSL 樣式表由一個或多套被稱為模板(template)的規則組成。每個模板含有當某個指定的節點被匹配時所應用的規則。match 屬性的值是 XPath 表達式(舉例,match="/" 定義整個文檔)。意思也就是匹配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> 元素可用于選取指定的節點集中的每個 XML 元素。select 屬性的值是一個 XPath 表達式。此表達式的工作方式類似于定位某個文件系統,在其中正斜杠可選擇子目錄。<xsl:for-each> 元素還可以加過濾<xsl:for-each select="root/user[age='12']"> (意思取的是子節點當中年齡12的)合法的過濾運算符::=? (等于) :!= (不等于):< (小于):> (大于) <xsl:sort select="age"/> //如需對結果進行排序,只要簡單地在 XSL 文件中的 <xsl:for-each> 元素內部添加一個 <xsl:sort> 元素:<xsl:sort select="age"/> <xsl:if test="age > 10"> //如需添加有條件的測試,請在 XSL 文件中的 <xsl:for-each> 元素內部添加 <xsl:if> 元素test :意思是條件<tr><td><xsl:value-of select="name"/></td> //<xsl:value-of> 元素,<xsl:value-of> 元素用于提取某個選定節點的值,并把值添加到轉換的輸出流中:select 屬性的值是一個 XPath 表達式。此表達式的工作方式類似于定位某個文件系統,在其中正斜杠可選擇子目錄。當我在 <xsl:for-each> 元素可省略從根節點找直接在 <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那么就在醒目右面加一個男人<td><xsl:value-of select="name"/><h6>男人</h6></td></xsl:when><xsl:when test="age < 20 "><xsl:value-of select="name"/><h6>男孩</h6>//如果是20以下加一個男孩</xsl:when><xsl:otherwise> //入伙上面兩種都不是就加一識別不了<xsl:value-of select="name"/><h6>識別不了年齡</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 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿著路徑或者 step 來選取的。
下面列出了最有用的路徑表達式:
nodename:選取此節點的所有子節點。 / : 從根節點選取。 // :從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 . :選取當前節點。:選取當前節點的父節點。 .. :選取當前節點的父節點 @ : 選取屬性。總結
- 上一篇: 如何避免动态字体Font Texture
- 下一篇: 准备工作(正则表达式学习)