目錄
1.XSL 指擴展樣式表語言(EXtensible Stylesheet Language);1
2.XSLT 指 XSL 轉換。在此教程中,你將學習如何使用 XSLT 將 XML 文檔轉換爲其他文檔,比如 XHTML。1
(方法;寫一個和xsl建立起關係的xml文件以及xsl文件)... 2
Xsl解析xml文件
1.XSL 指擴展樣式表語言(EXtensible Stylesheet Language);
萬維網聯盟 (W3C) 開始發展 XSL 的原因是:存在着對於基於 XML 的樣式表語言的需求。
2.XSLT 指 XSL 轉換。在此教程中,你將學習如何使用 XSLT 將 XML 文檔轉換爲其他文檔,比如 XHTML。
CSS = HTML 樣式表
HTML 使用預先定義的標籤,標籤的意義很容易被理解。
HTML 元素中的 <table> 元素定義表格 - 並且瀏覽器清楚如何顯示它。
向 HTML 元素添加樣式是很容易的。通過 CSS,很容易告知瀏覽器用特定的字體或顏色顯示一個元素。
XSL = XML 樣式表
XML 不使用預先定義的標籤(我們可以使用任何喜歡的標籤名),並且這些標籤的意義並不都那麼容易被理解。
<table> 元素意味着一個 HTML 表格,一件傢俱,或是別的什麼東西 - 瀏覽器不清楚如何顯示它。
XSL 可描述如何來顯示 XML 文檔!
XSL - 不僅僅是樣式表語言XSL 包括三部分:
XSLT
一種用於轉換 XML 文檔的語言。
XPath
一種用於在 XML 文檔中導航的語言。
XSL-FO
一種用於格式化 XML 文檔的語言。
Xsl大致相當於html中的css,來定義xml如何顯示;
3.xsl解析xml文件——Eg1:
我們現在要把下面這個 XML 文檔("cdcatalog.xml")轉換爲 XHTML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country><?xml:namespace prefix="st1">?xml:namespace>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
方法;寫一個和xsl建立起關係的xml文件以及xsl文件
文件1:cdcatalog.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
文件2:cdcatalog.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="/"> //註釋:match="/"屬性則把此模板與 XML 源文檔的根相聯繫。
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd"> //註解:利用xslt的for-each 元素將XML中元素遍歷輸出
//註釋:添加查找條件一般在此位置
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
//註釋:select屬性的值是一個 XPath 表達式。此表達式的工作方式類似於定位某個文件系統,在其中正斜槓可選擇子目錄。
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
4.xsl解析xml文件——Eg2:
我們需要寫一個xml文件並將其顯示出來出如下結果來:
張老師的學生 | |
小張 | 小王 |
文件一:ts.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ts.xsl"?>
<teacher>
<name>小張</name>
<name>小王</name>
</teacher>
文件二:ts.xml
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table width="328" border="2" bgcolor="yellow">
<tr>
<th width="133">張老師的學生:</th>
</tr>
<xsl:for-each select="teacher/name">
<tr>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
5. 幾個XSLT重要要素
<xsl:template> 元素
<xsl:template> 元素用於構建模板。XSL 樣式表由一個或多套被稱爲模板(template)的規則組成。每個模板含有當某個指定的節點被匹配時所應用的規則。
<xsl:value-of> 元素
<xsl:value-of select=” ”>元素用於提取某個選定節點的值,並把值添加到轉換的輸出流中
select屬性的值是一個 XPath 表達式。此表達式的工作方式類似於定位某個文件系統,在其中正斜槓可選擇子目錄。
<xsl:for-each> 元素
<xsl:for-each> 元素允許您在 XSLT 中進行循環。可用於選取指定的節點集中的每個 XML 元素
通過在 <xsl:for-each> 元素中添加一個選擇屬性的判別式,我們也可以過濾從 XML 文件輸出的結果。
<xsl:for-each select="catalog/cd[artist='Bob Dylan']
">
合法的過濾運算符:
= (等於)
!= (不等於)
< (小於)
> (大於)
<xsl:sort> 元素
<xsl:sort> 元素用於對結果進行排序。
<?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>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<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>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
//
註釋
:
select屬性指示需要排序的 XML 元素。
<xsl:if> 元素
<xsl:if> 元素用於放置針對 XML 文件內容的條件測試。
語法
<xsl:if test="expression">
...
...如果條件成立則輸出...
...
</xsl:if>
在何處放置 <xsl:if> 元素
如需添加有條件的測試,請在 XSL 文件中的 <xsl:for-each> 元素內部添加 <xsl:if> 元素:
<?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>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 10">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
註釋:必選的test屬性的值包含了需要求值的表達式。
上面的代碼僅僅會輸出價格高於 10 的 CD 的 title 和 artist 元素。
<xsl:choose> 元素
<xsl:choose> 元素用於結合 <xsl:when> 和 <xsl:otherwise> 來表達多重條件測試。
語法
<xsl:choose>
<xsl:when test="expression"> //條件表達式
... 輸出 ...
</xsl:when>
<xsl:otherwise> //條件不等輸出
... 輸出 ....
</xsl:otherwise>
</xsl:choose>
在何處放置選擇條件
要插入針對 XML 文件的多重條件測試,請向 XSL 文件添加 <xsl:choose>、<xsl:when> 以及 <xsl:otherwise>:
<?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>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
上面的代碼會在 CD 的價格高於 10 時向 "Artist" 列添加粉色的背景顏色。
<xsl:apply-templates> 元素
<xsl:apply-templates> 元素可把一個模板應用於當前的元素或者當前元素的子節點。
假如我們向 <xsl:apply-templates> 元素添加一個 select 屬性,此元素就會僅僅處理與屬性值匹配的子元素。我們可以使用 select 屬性來規定子節點被處理的順序。
請看下面的 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>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>