天天看點

XSL将XML轉換成HTML檔案 js方法

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>