古詩詞大全網 - 成語解釋 - DXML是壹個什麽概念

DXML是壹個什麽概念

這是有關在 Web 站點上使用可擴展的標記語言 (XML) 和可擴展的樣式表語言 (XSL) 的系列文章中的第三篇。在第壹篇文章中,我們談到了使用 XML 文件存儲站點的目錄 (TOC) 信息,使用 XSL、層疊樣式表 (CSS) 和腳本輸出 DHTML TOC。在第二篇文章中,我們使用同壹 XML 數據生成 DHTML 菜單,而在 microsoft.com 等 Web 站點中就用到了這些菜單。如果您還沒有閱讀這些文章,我們建議您在閱讀這壹篇文章之前,先閱讀前兩篇。

本月,我們將討論在站點上實現菜單和 TOC 的幾種不同方式。我們將解決有關實現過程和架構的幾個問題,同時看壹看幾個案例:

在框架中直接引入 XML

在動態生成的 HTML 中使用 ASP #include

在預先創建的 HTML 中使用 ASP #include

有壹點很重要,必須註意:盡管我們能夠用任壹瀏覽器查看輸出的 DHTML,但是只要進行 XSL 轉換,就必須安裝 Internet Explorer 5。如果像在第壹個案例中,需要將 XML 發送到客戶機,則客戶機必須是 Internet Explorer 5。如果像在第二個和第三個案例中,要在服務器上轉換 XML,則服務器上必須安裝 Internet Explorer 5。(註意:在服務器上可以只安裝可重分發的 Microsoft XML 分析程序(英文))。

案例 1:在框架中直接引入 XML

如果您處於完全的 Internet Explorer 5 環境中(如 intranet),將輸出發送給用戶的最簡單的方式可能是借助於 Internet Explorer 5 直接瀏覽 XML(英文) 的功能。Internet Explorer 5 可以使用相關的樣式表提交 XML;您不需要進行顯式轉換。您只需要指定帶有處理指南(英文)的 XSL 樣式表。

在第壹個案例中,我們使用自己的 TOC 作為例子,TOC 框架中將包含壹個文件,其 webdev.xml 文件將引用 TOC 樣式表,如下所示:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="toc.xsl"?>

<TOPICLIST TYPE="Web Dev References">

.

.

.

</TOPICLIST>

TOC 框架自身將包含在框架集中,如下所示:

<FRAMESET COLS="150,*">

<FRAME NAME="fraToc" SRC="webdev.xml">

<FRAME NAME="fraContent" SRC="home.htm">

<FRAMESET>

如果您用 Internet Explorer 5 查看這些代碼,您可以查看 XML 瀏覽 TOC 演示。

瀏覽 XML 除了是壹種向用戶發送帶樣式的 XML 的簡便方式,它還是壹種非常好的調試 XSL 樣式表的方式,即使您要在服務器上進行轉換,也可以使用這種方式。Internet Explorer 可以在出現錯誤時為您提供即時的反饋,包括行號和錯誤類型。

案例 2:在動態生成的 HTML 中使用 ASP #includes

在許多情況下,除了 Internet Explorer 5 之外,您還需要顧及其他瀏覽器,或者希望只用 XML 構成 HTML 文檔的壹部分(如頂端的菜單),而不是整篇文檔。ASP #include 命令為在較大型文檔中插入幾個字符的 HTML 和跨多頁***享公用代碼提供了壹個非常好的方式。通過在 #include 文件中進行 XSL 轉換,可以非常方便地對 ASP #includes 進行擴展,以便利用 XML。

#include 文件將加載 XML 和 XSL 文件,將其轉換為 HTML,然後將 HTML 寫入 ASP 文檔。如下所示是包含菜單的 ASP 文檔:

列表 1:使用“動態” #includes 的通用 HTML 文檔模板

<HTML>

<HEAD>

<TITLE>Dynamic ASP #include demo</TITLE>

</HEAD>

<BODY>

<!-- #include file="menus_dyn.inc" -->

<P>此處為常規文檔內容...</P>

</BODY>

</HTML>

Include 文件將完成所有繁瑣的工作。

列表 2:menus_dyn.inc

<% @LANGUAGE="JScript" %>

<%

var sXml = "webdev.xml";

var sXsl = "menus.xsl";

var oXmlDoc = Server.CreateObject("Microsoft.XMLDOM");

oXmlDoc.async = false;

oXmlDoc.load(Server.MapPath(sXml));

if (false != oXmlDoc.parseError)

{

Response.Write('XML parseError on line ' + oXmlDoc.parseError.line);

Response.End();

}

var oXslDoc = Server.CreateObject("Microsoft.XMLDOM");

oXslDoc.async = false;

oXslDoc.load(Server.MapPath(sXsl));

if (false != oXslDoc.parseError)

{

Response.Write('XSL parseError on line ' + oXslDoc.parseError.line);

Response.End();

}

Response.Write(oXmlDoc.transformNode(oXslDoc));

%>

從上壹篇文章開始,我已經將菜單升級為可跨瀏覽器使用,所以您能夠應用任壹瀏覽器查看動態 #include 演示。

案例 3:在預先創建的 HTML 中使用 ASP #include

在服務器負荷較重的情況下,或您無論因何種原因,不希望在每次加載菜單時調用 XML 對象,您可以選擇第三種方案:脫機進行轉換。在這壹情況下所使用的代碼與“真正的”include 幾乎完全相同。

唯壹的區別是:有別於使用 Response.Write 輸出所需要的 HMTL,我們可以使用 Scripting.FileSystemObject 對象將已轉換的 HTML 保存到壹個文件中。

列表 3:makemenus.asp

<% @LANGUAGE="JScript" %>

<%

var sXml = "webdev.xml";

var sXsl = "menus.xsl";

var oXmlDoc = Server.CreateObject("Microsoft.XMLDOM");

oXmlDoc.async = false;

oXmlDoc.load(Server.MapPath(sXml));

if (false != oXmlDoc.parseError)

{

Response.Write('XML parseError on line ' + oXmlDoc.parseError.line);

Response.End();

}

var oXslDoc = Server.CreateObject("Microsoft.XMLDOM");

oXslDoc.async = false;

oXslDoc.load(Server.MapPath(sXsl));

if (false != oXslDoc.parseError)

{

Response.Write('XSL parseError on line ' + oXslDoc.parseError.line);

Response.End();

}

var sOutput = oXmlDoc.transformNode(oXslDoc);

var sIncFileName = "menus_pre.inc";

var oFS = Server.CreateObject("Scripting.FileSystemObject");

var oIncFile = oFS.CreateTextFile(Server.MapPath(sIncFileName));

oIncFile.Write(sOutput);

oIncFile.Close();

Response.Write('The include file <A HREF="' + sIncFileName + '">'

+ sIncFileName + '</A> was successfully created.');

%>

我們不是寫入到 ASP 響應流,而是在服務器上創建了壹個“靜態”文件,其中包含已轉換的 HTML。換句話說,與將 XML 轉換代碼直接置於 #include 文件不同,所有的轉換代碼都將位於 “實用程序”ASP 頁中,該 ASP 頁將生成 include 文件。

如果您需要對 Web 應用程序使用編譯過程,您可能會喜歡這種方式。無論任何時候更新 menus.xml 文件,我們只需加載 makemenus.asp ,輸出壹個更新的 #include 文件。將這壹算法用在 Visual Basic 應用程序中能夠實現同壹目的。

像在案例 2 中壹樣,我們在所有使用這些菜單的文檔中添加這壹 #include 文件。