xsl解析html

目錄

Xsl解析xml文件... 1

1.XSL 指擴展樣式表語言(EXtensible Stylesheet Language;1

2.XSLT  XSL 轉換。在此教程中,你將學習如何使用 XSLT  XML 文檔轉換爲其他文檔,比如 XHTML1

3.xsl解析xml文件——Eg1... 2

方法;寫一個和xsl建立起關係的xml文件以及xsl文件... 2

4.xsl解析xml文件——Eg2... 3

5. 幾個XSLT重要要素... 3

語法... 3

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>

文件2cdcatalog.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"> //註解:利用xsltfor-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']">

合法的過濾運算符:

  • =  (等於)

  • != (不等於)

  • &lt; (小於)

  • &gt; (大於)

<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 &gt; 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 &gt; 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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章