XSLT - 在服務(wù)器端

2020-04-24 16:07 更新

由于并非所有的瀏覽器都支持 XSLT,另一種解決方案是在服務(wù)器上完成 XML 至 XHTML 的轉(zhuǎn)化。

跨瀏覽器解決方案

在前面的章節(jié),我們講解過(guò)如何在瀏覽器中使用 XSLT 來(lái)完成 XML 到 XHTML 的轉(zhuǎn)化。我們創(chuàng)建了一段使用 XML 解析器來(lái)進(jìn)行轉(zhuǎn)換的 JavaScript。JavaScript 解決方案無(wú)法工作于沒(méi)有 XML 解析器的瀏覽器。

為了讓 XML 數(shù)據(jù)適用于任何類(lèi)型的瀏覽器,我們必須在服務(wù)器上對(duì) XML 文檔進(jìn)行轉(zhuǎn)換,然后將其作為 XHMTL 發(fā)送回瀏覽器。

這是 XSLT 的另一個(gè)優(yōu)點(diǎn)。XSLT 的設(shè)計(jì)目標(biāo)之一是使數(shù)據(jù)在服務(wù)器上從一種格式轉(zhuǎn)換到另一種格式成為可能,并向所有類(lèi)型的瀏覽器返回可讀的數(shù)據(jù)。

XML 文件和 XSLT 文件

請(qǐng)看這個(gè)在前面的章節(jié)已展示過(guò)的 XML 文檔:

<?xml version="1.0" encoding="UTF-8"?>
<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>

以及附隨的 XSL 樣式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Title</th>
      <th style="text-align:left">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>
</xsl:template>

</xsl:stylesheet>

請(qǐng)注意,這個(gè) XML 文件沒(méi)有包含對(duì) XSL 文件的引用。

重要事項(xiàng):上面這句話意味著,XML 文件可使用多個(gè)不同的 XSL 樣式表來(lái)進(jìn)行轉(zhuǎn)換。

在服務(wù)器把 XML 轉(zhuǎn)換為 XHTML

這是用于在服務(wù)器上把 XML 文件轉(zhuǎn)換為 XHTML 的源代碼:

使用 PHP 代碼轉(zhuǎn)換:

<?php
// 載入 XML 文件
$xml = new DOMDocument;
$xml->load('cdcatalog.xml');

// 載入 XSL 文件
$xsl = new DOMDocument;
$xsl->load('cdcatalog.xsl');

// 設(shè)置轉(zhuǎn)換
$proc = new XSLTProcessor;

// 添加 xsl 規(guī)則
$proc->importStyleSheet($xsl);

echo $proc->transformToXML($xml);
?>

使用 ASP 代碼轉(zhuǎn)換:

<%
'載入 XML 文件
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("cdcatalog.xml"))

'載入 XSL 文件
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))

'轉(zhuǎn)換文件
Response.Write(xml.transformNode(xsl))
%>

第一段代碼創(chuàng)建了微軟的 XML 解析器(XMLDOM)的一個(gè)實(shí)例,并把 XML 文件載入了內(nèi)存。第二段代碼創(chuàng)建了解析器的另一個(gè)實(shí)例,并把這個(gè) XSL 文件載入了內(nèi)存。最后一行代碼使用 XSL 文檔轉(zhuǎn)換了 XML 文檔,并把結(jié)果作為 XHTML 發(fā)送到您的瀏覽器。太好了!


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)