JavaScript解決方案
XSL是如何将XML轉換成HTML檔案。方法就是在XML文檔的頭部加入一個XSL樣式表資訊,然後讓浏覽器執行轉換過程。
這種方法在大部分情況下都做得很好,但是在不支援XML的浏覽器中就無法正确顯示了。
一個更好的更全面的解決方案是使用Javascript來實作XML到HTML的轉換。但是使用JavaScript必須得到以下功能支援:
a.允許Javascript代替浏覽器進行細節檢測;
b.根據不同的需要和不同的浏覽器使用不同的樣式表。
對于XSL來說這是完全可行的。設計XSL的目标之一就是允許将一種格式轉換成另一種格式,支援不同的浏覽器,支援不同的使用者需求。未來的浏覽器的重要任務就是在用戶端執行XSL的轉換工作。
2.一個具體的執行個體
下面是我們上面提到的一個XML文檔(cd_catalog.xml)例子的部分代碼:
<?xml version="1.0" encoding="ISO8859-1" ?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
.
.
.
下面是完整的XSL檔案(cd_catalog.xsl):
<?xml version=';';1.0';';?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<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>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
注意,現在XML檔案還沒有加入XSL樣式表,還沒有被轉換成HTML檔案。
下面是用JavaSript來實作最後轉換的HTML代碼:
<html>
<body>
<script language="javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cd_catalog.xml")
// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cd_catalog.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
</body>
</html>
第一段代碼建立一個Microsoft Parser(XMLDOM)解析的對象,并将XML文檔讀入記憶體;第二段代碼建立另外一個對象并導入XSL文檔;最後一行代碼将XML文檔用XSL文檔轉換,并将結果輸出到HTML檔案中。
使用xsl顯示xml文檔
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="st.xsl" target="_blank" rel="external nofollow" ?>
<students>
<student>
<name>August</name>
<tele>91%</tele>
<dizhi>9%</dizhi>
</student>
<student>
<name>zhangjie</name>
<tele>58469523</tele>
<dizhi>beijinglu12hao</dizhi>
</student>
</students>
上面是xml語言,要在網頁中顯示,首先要用xsl編輯它的樣式。下面是xsl的代碼。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> //此連結指向了官方的 W3C XSLT 命名空間 注意大小寫
<xsl:template match="/">
<html>
<body>
<h2>網頁陶吧通路統計</h2>
<table >
<tr bgcolor="#9acd32">
<th align="left">Month</th>
<th align="left">% of IE visitor</th>
<th align="left">% of NC visitor</th>
</tr>
<xsl:for-each select="students/student">
<tr>
<td>
<xsl:value-of select="name"/>
</td>
<td>
<xsl:value-of select="tele"/>
</td>
<td>
<xsl:value-of select="dizhi"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
儲存為st.xsl
**下面是轉載他人的學習心得 很簡明很實用推薦大家一起學習**
這是我今天學習的時候遇到的另一個問題,做圖像超連結要把連結位址放到<a>的href屬性中去,可是這就是在标簽中套标簽,是不可以的,查了《Web程式設計實做教程》,才知道正确的解決方案,現在與大家分享。
此段代碼運作需要兩張圖檔:a.gif和b.gif。
my.xml
以下内容為程式代碼:
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="mystyle.xsl" target="_blank" rel="external nofollow" ?>
<Books>
<Book ID="a001">
<Name>網絡指南</Name>
<Photo>a.gif</Photo>
<Homepage>http://www.a.com</Homepage>
</Book>
<Book ID="a002">
<Name>區域網路技術</Name>
<Photo>b.gif</Photo>
<Homepage>http://www.b.com</Homepage>
</Book>
</Books>
mystyle.xsl
以下内容為程式代碼:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Books/Book">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="./Homepage"/>
</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="./Photo"/>
</xsl:attribute>
</xsl:element>
</xsl:element>
<br/>
</xsl:template>
</xsl:stylesheet>
在浏覽器上的顯示結果:
豎向平列顯示兩個圖檔。
說明:
使用超連結,需要借助<xsl:element>和<xsl:attribute>兩個标簽,基本使用方法就可以參照上邊的例子,在深奧一點的,如果你想出來了,記得要和大家分享喲。
長見識,嘿嘿,這個可是真是第一次看見。
{Homepage}
<xsl:value-of select="Homepage"/>
兩個在任何時候都是等價的吧?
你上邊的代碼和我原來的效果有點小差别,我幫你完善一下:
mystyle.xsl
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Books/Book">
<a href="{Homepage}" target="_blank" rel="external nofollow" >
<img src="{Photo}"/>
</a>
</xsl:template>
</xsl:stylesheet>