《XML案例教程》課件第7章_第1頁
《XML案例教程》課件第7章_第2頁
《XML案例教程》課件第7章_第3頁
《XML案例教程》課件第7章_第4頁
《XML案例教程》課件第7章_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第7章基于DOM的XML文檔解析7.1DOM概述7.2DOM節(jié)點層次7.3XMLDOM的基本操作(基于JavaScript)7.4綜合實例7.5本章小結習題7

7.1DOM概述

W3C文檔對象模型(DOM)是一個能夠讓程序和腳本動態(tài)訪問及更新文檔內容、結構和樣式的語言平臺。W3CDOM提供了一套標準的對象用于HTML和XML文檔,以及一個訪問這些文檔的標準接口。

W3CDOM被分為不同的部分(核心DOM、XMLDOM、HTMLDOM)以及不同的級別(DOMLevel1/2/3)。

(1)核心DOM:定義了一套標準的用于任何結構化文檔的對象。

(2)?XMLDOM:定義了一套標準的用于XML文檔的對象。

(3)?HTMLDOM:定義了一套標準的用于HTML文檔的對象。7.1.1XMLDOM的含義

XMLDOM(XMLDOM或XMLDom)是針對XML的文檔對象模型(DocumentObjectModel)的W3C標準,它獨立于平臺和語言,JavaScriptLanguage、VBScriptLanguage以及C#等大多數語言都支持文檔對象模型。XMLDOM定義了一套標準,用于訪問XML文檔和處理XML文檔的對象。

本章圍繞一個描述圖書庫中圖書信息的XML文檔來進行XMLDOM概念及一些基本操作的說明,例7-1給出了該XML文檔的代碼。

【例7-1】

案例說明:一個簡單的XML文檔范例。

程序名稱:ch7-1.xml

01<?xmlversion="1.0"?>

02<BookStore>

03<BookInfoISBN="7-5606-0492-7/TP0229">

04<BookName>軟件系統開發(fā)技術(修訂版)</BookName>

05<AuthorName>潘錦平</AuthorName>

06<PublisherAddress>07<Province>陜西</Province>

08<City>西安</City>

09<AddressDetail>太白南路2號</AddressDetail>

10</PublisherAddress>

11<Price>12.30</Price>

12</BookInfo>

13</BookStore>案例分析:例7-1中該文檔的根元素是<BookStore>(圖書庫),其子元素為<BookInfo>(圖書信息),圖書信息元素有一個屬性“ISBN”(國際標準書號)。圖書信息包括四個子元素:<BookName>(圖書名稱)、<AuthorName>(作者姓名)、<PublisherAddress>(出版社地址)和<Price>(圖書價格)。其中<PublisherAddress>元素由三個子元素組成:<Province>(省)、<City>(市)和<AddressDetail>(詳細地址)。7.1.2文檔(Document)對象的概念

DOM將XML文檔作為樹結構來查看。所有的元素,它們所包含的文本以及它們的屬性,都可以通過DOM樹來進行訪問。它們的內容可以被修改或刪除,新內容也可被創(chuàng)建。

文檔(Document)對象是一棵XML文檔樹的根,可為我們提供對文檔數據的最初(或最頂層)的訪問入口。前面章節(jié)所講述的XML文檔要素中的元素、元素的屬性、元素的文本內容、注釋、處理指令(PI)等均存在于Document對象中。Document對象提供了訪問和處理這些XML文檔要素的方法。

對于例7-1中的XML文檔“ch7-1.xml”,可以表述成如圖7-1所示的樹型結構。圖7-1Document對象從圖7-1所示的樹型結構中可以清晰地看出Document對象是整個XML文檔的入口,也是文檔對象模型樹結構的根。7.1.3節(jié)點(Node)的概念

根據W3C制定的XMLDOM,將節(jié)點定義為XML文檔中的每個組成成分,具體如下:

(1)整個文檔是一個文檔節(jié)點。

(2)每個XML標簽是一個元素節(jié)點。

(3)包含在XML元素中的文本內容是文本節(jié)點。

(4)每一個XML屬性是一個屬性節(jié)點。

(5)注釋屬于注釋節(jié)點。對于例7-1中的XML文檔“ch7-1.xml”,元素<Province>是一個元素節(jié)點,該元素的文本內容“陜西”是一個文本節(jié)點,整個XML文檔(Document對象)也是一個節(jié)點。

7.2DOM節(jié)點層次

7.2.1節(jié)點樹

XML文檔中的所有節(jié)點組成了一個文檔樹(或節(jié)點樹)。XML文檔中的每個元素、屬性、文本等都代表著樹中的一個節(jié)點(如圖7-1所示)。樹起始于文檔節(jié)點,并由此向下延伸,直到處于這棵樹最低級別的所有節(jié)點為止。在一個節(jié)點樹中,位于最頂端的節(jié)點稱為根節(jié)點(Document節(jié)點);每一個節(jié)點,除根之外,都擁有父節(jié)點;一個節(jié)點可以有無限的子節(jié)點;同級節(jié)點指擁有相同父節(jié)點的節(jié)點;葉節(jié)點是沒有子節(jié)點的節(jié)點。上面對于節(jié)點樹的描述和計算機網絡中的域名系統(DomainNameSystem)定義的樹型結構非常類似。

需要注意的是,文本總是被存儲在文本節(jié)點中,最簡單的元素節(jié)點在其之下也通常擁有文本節(jié)點。對于例7-1中的XML文檔“ch7-1.xml”,在<Price>12.30</Price>中,存在一個元素節(jié)點(Price),同時其下是一個文本節(jié)點,其中包含文本“12.30”,這個文本節(jié)點是整個XML節(jié)點樹中的一個葉節(jié)點。7.2.2節(jié)點關系

術語“父”(Parent)、“子”(Child)和“兄弟”(Sibling)被用來描述節(jié)點間的關系。為了更好地說明節(jié)點間的關系,只針對例7-1中的XML文檔“ch7-1.xml”中的元素,可以構造出如圖7-2所示的元素節(jié)點樹,這個元素節(jié)點樹是整個XML節(jié)點樹的一個片段。在這個圖中可以清晰地看出,<BookStore>元素節(jié)點是<BookInfo>元素節(jié)點的父節(jié)點,反過來<BookInfo>元素節(jié)點是<BookStore>元素節(jié)點的子節(jié)點;位于XML節(jié)點樹的相同層次的元素節(jié)點<BookName>、<AuthorName>、<PublisherAddress>、<Price>互為兄弟節(jié)點;虛線及上面的注釋代表了節(jié)點間的關系和方向。圖7-2節(jié)點樹和節(jié)點關系為了更好地表達節(jié)點間的關系,W3C的XMLDOM中還制定了更為詳細的節(jié)點間關系:

(1)針對于父節(jié)點有第一個子節(jié)點(FirstChild)和最后一個子節(jié)點(LastChild)的關系。

(2)針對于同等層次的(具有相同父節(jié)點的)節(jié)點有下一個兄弟節(jié)點(NextSibling)和上一個兄弟節(jié)點(PriviousSibling)的關系。

XMLDOM節(jié)點樹具備的這些節(jié)點關系將為訪問節(jié)點樹中的節(jié)點提供很大的方便,針對例7-1的XML文檔“ch7-1.xml”中的元素,可以構造出如圖7-3所示的元素節(jié)點樹的節(jié)點關系,虛線及上面的注釋代表了節(jié)點間的關系和方向。圖7-3節(jié)點樹和節(jié)點關系表達7.3XMLDOM的基本操作(基于JavaScript)

本節(jié)基于JavaScript語言來講述如何對XMLDOM節(jié)點樹進行訪問和處理。本節(jié)的部分案例代碼以客戶端執(zhí)行腳本的形式予以實現,部分代碼以服務器端執(zhí)行腳本的形式予以實現。案例中處理的XML文檔均為例7-1中的XML文檔“ch7-1.xml”,該文檔位于嵌入JavaScript腳本的頁面所在目錄下。程序代碼中以“//”起頭的代碼段在JavaScript中表示注釋。7.3.1創(chuàng)建XMLDocument對象

Document對象是整個XML文檔的訪問入口,所以如果要訪問一個XML文檔首先就要構建Document對象,在JavaScript中代表XMLDOM文檔的對象是ActiveXObject對象類型“Microsoft.XMLDOM”。例7-2給出的案例說明了如何構建一個XMLDOM對象并裝載XML文檔。

【例7-2】

案例說明:本案例的代碼嵌入HTML文件中,作用是構建一個XMLDOM對象并加載例7-1中的XML文檔“ch7-1.xml”,同時將XML文檔元素BookInfo的子元素個數輸出到對話框中。程序名稱:ch7-2.html

01<scriptlanguage="JavaScript">

//定義變量XMLDoc

02varXMLDoc;

//將該變量賦予XMLDocument對象類型

03XMLDoc=newActiveXObject('Microsoft.XMLDOM');

//禁止異步加載,當文檔加載完畢,控制權才會返回給調用進程

04XMLDoc.async=false;

//加載XML文檔

05XMLDoc.load("ch7-1.xml");//定義變量XMLNode

06varXMLNode;

//將根元素下的第一個子元素BookInfo賦予XMLNode變量

07XMLNode=XMLDoc.documentElement.firstChild;

//將BookInfo的子元素數目顯示在對話框上

08alert(XMLNode.childNodes.length);

09</script>案例分析:第03行代碼建立了一個XMLDOM對象“XMLDoc”,該對象是XMLDocument類的一個實例。第05行代碼使用XMLDOM對象的Load方法裝載XML文件,Load方法的參數“ch8-1.xml”表達了XML文檔文件與該腳本嵌入的HTML文件在同一個目錄下。第07行代碼使用XMLDOM對象“XMLDoc”的documentElement.firstChild方法,該方法返回了加載XML文檔的根元素<BookStore>的第一個子元素<BookInfo>。第08行代碼使用節(jié)點的childNodes.length屬性獲得了根元素BookStore的子元素個數。

程序運行結果如圖7-4所示。圖7-4例7-2的運行結果7.3.2根據節(jié)點文本內容查找節(jié)點

如何遍歷子元素并進行元素內容的判斷是訪問XML節(jié)點數最基本的要求之一,例7-3給出了查找匹配元素內容操作的案例實現過程。

【例7-3】

案例說明:本案例的作用是,搜索例7-1的XML文檔“ch7-1.xml”中符合條件的元素文本內容,并將搜索結果輸出到對話框中。程序名稱:ch7-3.asp

01<scriptlanguage="JavaScript">//定義變量XMLDoc

02varXMLDoc;

//將該變量賦予XMLDocument對象類型

03XMLDoc=newActiveXObject('Microsoft.XMLDOM');

//禁止異步加載,當文檔加載完畢,控制權才會返回給調用進程

04XMLDoc.async=false;

//加載XML文檔

05XMLDoc.load("ch7-1.xml");//定義變量XMLNode

06varXMLNode;

//將Document元素下的根元素BookStore的第一個子元素BookInfo賦予XMLNode變量

07XMLNode=XMLDoc.documentElement.firstChild;

//利用BookStore元素的子元素數量進行遍歷

08for(vari=0;i<XMLNode.childNodes.length;i++)

09{

//判斷元素值是否等于需要查找的值

10if(XMLNode.childNodes(i).text=="潘錦平")11{

//找到后顯示成功查找結果

12alert("找到該作者姓名!");

//查找成功后中止循環(huán)

13i=XMLNode.childNodes.length

14}

15}

16</script>案例分析:第08行代碼利用for循環(huán)對元素<BookInfo>的四個子元素進行遍歷,其子元素的第一個索引為0,所以該循環(huán)以索引項0開始,止于子元素數目-1(4-1=3)。第10行代碼使用childNodes(i)遍歷所有的索引項,使用childNodes(i).text來獲得遍歷到的子元素的元素值。第13行代碼使用了一個技巧,一旦查找到復合條件的元素就終止遍歷,終止的條件是索引值為子元素數目。

程序運行結果如圖7-5所示。圖7-5案例7-3的運行結果7.3.3使用節(jié)點對象方法讀取XML文檔

上面學習了構建文檔對象和查找節(jié)點對象,XMLDOM中定義的節(jié)點關系都在節(jié)點對象的方法中體現,例7-4提供的案例將使用節(jié)點關系訪問XML節(jié)點樹中的節(jié)點。

【例7-4】

案例說明:本案例的作用是,使用節(jié)點對象方法中表達節(jié)點關系的方法在例7-1中的XML文檔“ch7-1.xml”節(jié)點樹中移動并訪問節(jié)點,將移動的節(jié)點名稱記錄下來并將移動的節(jié)點路徑輸出到對話框中。程序名稱:ch7-4.asp

01<scriptlanguage="JavaScript">

//定義變量XMLDoc

02varXMLDoc;

//將該變量賦予XMLDocument對象類型

03XMLDoc=newActiveXObject('Microsoft.XMLDOM');

//禁止異步加載,當文檔加載完畢,控制權才會返回給調用進程

04XMLDoc.async=false;

//加載XML文檔

05XMLDoc.load("ch7-1.xml");//定義變量WalkingPath,用來記錄節(jié)點路徑

06varWalkingPath;

//定義變量XMLNode,用來獲取路徑上的節(jié)點

07varXMLNode;

//使用documentElement獲取根元素BookStore,記錄根元素BookStore名稱

08XMLNode=XMLDoc.documentElement;

09WalkingPath="Document"+"-->"+XMLNode.nodeName;//在根元素BookStore上使用FirstChild方法獲取第一個子節(jié)點BookInfo,記錄元素BookInfo名稱

10XMLNode=XMLDoc.documentElement.firstChild;

11WalkingPath=WalkingPath+"-->"+XMLNode.nodeName;

//在元素BookStore上使用FirstChild方法獲取第一個子節(jié)點BookName,記錄元素BookName名稱

12XMLNode=XMLNode.firstChild;

13WalkingPath=WalkingPath+"-->"+XMLNode.nodeName;//在元素BookName上使用NextSibling方法獲取節(jié)點AuthorName,記錄元素AuthorName名稱

14XMLNode=XMLNode.nextSibling;

15WalkingPath=WalkingPath+"-->"+XMLNode.nodeName;

//在元素AuthorName上使用NextSibling方法獲取節(jié)點PublisherAddress,記錄元素PublisherAddress名稱

16XMLNode=XMLNode.nextSibling;

17WalkingPath=WalkingPath+"-->"+XMLNode.nodeName;//在元素PublisherAddress上使用FirstChild方法獲取第一個子節(jié)點Province,記錄元素Province名稱

18XMLNode=XMLNode.firstChild;

19WalkingPath=WalkingPath+"-->"+XMLNode.nodeName;

//在元素Province上使用ParentNode方法獲取父節(jié)點PublisherAddress,記錄元素PublisherAddress名稱

20XMLNode=XMLNode.parentNode;

21WalkingPath=WalkingPath+"-->"+XMLNode.nodeName;//將經過的節(jié)點路徑顯示在對話框中

22alert(WalkingPath);

23</script>案例分析:第06行代碼中定義的變量WalkingPath用來存儲走過的節(jié)點路徑,每訪問到一個節(jié)點就將元素節(jié)點名稱添加進該變量。第09行代碼使用節(jié)點對象的nodeName方法獲取當前元素節(jié)點的名稱。第14行代碼使用節(jié)點對象的nextSibling方法訪問當前節(jié)點的第一個兄弟節(jié)點,當前節(jié)點和nextSibling方法所訪問的節(jié)點位于XMLDOM樹的同一層次上。第21行代碼使用節(jié)點對象的parentNode方法訪問當前節(jié)點的父節(jié)點,firstChild方法訪問節(jié)點的方向在XMLDOM層次樹中的方向是向下,parentNode方法訪問節(jié)點的方向在XMLDOM層次書樹中的方向是向上。程序ch7-4.asp訪問XML節(jié)點樹的過程如圖7-6所示。

程序運行結果如圖7-7所示。圖7-6程序ch7-4.asp訪問XML節(jié)點樹的過程圖7-7例7-4的運行結果7.3.4編輯節(jié)點

以下的三個案例(例7-5、例7-6和例7-7)中將采用服務器腳本運行,要建立相應的Web站點(或者虛擬目錄)來對嵌入腳本的網頁(?.asp)進行訪問,建立好Web站點(或者虛擬目錄)以后,還需進行相應的配置才能夠運行腳本需要的運行環(huán)境。下面給出一個便于調試的環(huán)境配置。

(1)配置IIS服務管理器中的Web服務擴展,將ActiveServerPages狀況配置為“允許”,如圖7-8所示。圖7-8IIS的Web服務擴展配置

(2)將身份驗證方法配置為不需要“集成Windows身份驗證”(將該項勾選掉),如圖7-9所示。

(3)更改應用程序設置中的執(zhí)行權限為“純腳本”,如圖7-10所示。

(4)勾選應用程序設置中的配置選項“啟用父路徑”,如圖7-11所示。圖7-9IIS的Web網站身份驗證配置圖7-10IIS的執(zhí)行權限配置圖7-11IIS的應用程序配置選項

(5)在建立網站頁面所在文件夾的權限中添加“Internet來賓帳戶”,并將權限設置為“完全控制”,如圖7-12所示。

W3C制定的XMLDOM規(guī)范不僅包括如何訪問節(jié)點樹,而且還包括如何對節(jié)點樹中的節(jié)點進行處理。例7-5提供的案例演示了如何修改節(jié)點文本內容。圖7-12IIS網站頁面所在文件夾權限設置

【例7-5】

案例說明:該腳本實例的作用是,更改一個例7-1的XML文檔“ch7-1.xml”中節(jié)點的文本內容,并將更改后的XML文檔另存為一個新的文件。程序名稱:ch7-5.asp

01<%@language="JScript"%>

02<%

//定義變量XMLDoc

03varXMLDoc;

//將該變量賦予XMLDocument對象類型

04XMLDoc=newActiveXObject('Microsoft.XMLDOM');

//禁止異步加載,當文檔加載完畢,控制權才會返回給調用進程05XMLDoc.async=false;

//使用Server對象的MapPath方法在服務器端加載XML文檔

06XMLDoc.load(Server.MapPath("ch7-1.xml"));//定義變量XMLNode

07varXMLNode;

//將Document元素下的第一個子元素BookStore賦予XMLNode變量

08XMLNode=XMLDoc.documentElement.firstChild;

//在元素BookStore上使用FirstChild方法獲取第一個子節(jié)點BookName并賦予XMLNode變量

09XMLNode=XMLNode.firstChild;

//使用節(jié)點的text屬性修改元素BookName的值

10XMLNode.text="修改后的書名";//使用Server對象的MapPath方法獲得服務器絕對路徑

11varSavePath=Server.MapPath('/');

//存儲更改后的XML文檔

12XMLDoc.save(Server.Mappath("ch7-5.xml"));

//友好提示存儲的服務器絕對路徑

13Response.Write("文件創(chuàng)建成功,請到下列文件夾查看:<br>"+SavePath);

14%>案例分析:第06行代碼使用服務器對象Server的MapPath方法,參數“ch7-1.xml”是采用相對路徑的文件名,該文件與訪問頁面“ch7-5.asp”位于同一個文件夾下。執(zhí)行該方法將返回服務器上文件“ch7-1.xml”的絕對路徑。第10行代碼使用了節(jié)點對象的text屬性,將元素<BookName>的值更改為“修改后的書名”。第11行代碼使用服務器對象Server的MapPath方法,參數“/”表明將返回訪問頁面“ch7-5.asp”所在文件夾的絕對路徑。第12行代碼使用XMLDOM對象的save方法存儲XML文檔,參數“ch7-5.xml”是存儲的XML文檔名稱。

程序運行結果及所處理XML文檔結果如圖7-13和圖7-14所示。圖7-13例7-5程序運行結果圖7-14例7-5處理的XML文檔結果7.3.5添加節(jié)點

對節(jié)點的處理還包括添加節(jié)點,例7-6提供的案例演示了如何構造一個由元素、子元素和元素內容組成的節(jié)點樹,并將這個構造的節(jié)點樹添加進原來的XML節(jié)點樹中。

【例7-6】

案例說明:該腳本實例的作用是,為例7-1中的XML文檔“ch7-1.xml”添加一個由子元素組成的節(jié)點樹,并將添加子元素后的XML文檔另存為一個新的文件。程序名稱:ch7-6.asp

01<%@language="JScript"%>

02<%

//定義變量XMLDoc

03varXMLDoc;

//將該變量賦予XMLDocument對象類型

04XMLDoc=newActiveXObject('Microsoft.XMLDOM');

//禁止異步加載,當文檔加載完畢,控制權才會返回給調用進程

05XMLDoc.async=false;

//使用Server對象的MapPath方法在服務器端加載XML文檔

06XMLDoc.load(Server.MapPath("ch7-1.xml"));//定義變量XMLElement

07varXMLElement;

//創(chuàng)建元素BookInfo,并將新建的元素賦予變量XMLElement

08XMLElement=XMLDoc.createElement("BookInfo");

//定義變量XMLELement1

09varXMLELement1;

//創(chuàng)建元素BookName,并將新建的元素賦予變量XMLElement1

10XMLElement1=XMLDoc.createElement("BookName");//定義變量XMLTextNode

11varXMLTextNode;

//創(chuàng)建文本節(jié)點,并將新建的文本節(jié)點賦予變量XMLTextNode

12XMLTextNode=XMLDoc.createTextNode("添加的圖書名稱");

//將文本節(jié)點作為元素值添加入新建的元素BookName

13XMLElement1.appendChild(XMLTextNode);

//為新建的元素BookInfo添加子元素BookName

14XMLElement.appendChild(XMLElement1);//定義變量XMLNode

15varXMLNode;

//將Document元素下的根元素BookStore賦予XMLNode變量

16XMLNode=XMLDoc.documentElement;

//為元素BookStore添加子元素BookInfo

17XMLNode.appendChild(XMLElement);//使用Server對象的MapPath方法獲得服務器的絕對路徑

18varSavePath=Server.MapPath('/');

//存儲更改后的XML文檔

19XMLDoc.save(Server.Mappath("ch7-6.xml"));

//友好提示存儲的服務器絕對路徑

20Response.Write("文件創(chuàng)建成功,請到下列文件夾查看:<br>"+SavePath);

21%>案例分析:第08行代碼使用XMLDOM對象的createElement方法創(chuàng)建元素,參數“BookInfo”是創(chuàng)建的新元素標記名稱。第10行代碼使用XMLDOM對象的createElement方法創(chuàng)建元素,參數“BookName”是創(chuàng)建的新元素標記名稱。第12行代碼使用XMLDOM對象的createTextNode方法創(chuàng)建文本節(jié)點,參數“添加的圖書名稱”是創(chuàng)建的文本節(jié)點文本值。第13行代碼使用節(jié)點對象的appendChild方法添加子節(jié)點,該方法的參數為一個文本節(jié)點,該文本節(jié)點作為子節(jié)點添加到元素<BookName>中,添加后元素<BookName>的值為“添加的圖書名稱”。第22行代碼使用節(jié)點對象的appendChild方法添加子節(jié)點,該方法的參數為一個元素節(jié)點,該元素節(jié)點作為子節(jié)點添加到元素<BookInfo>中,添加后元素<BookInfo>的子元素為<BookName>。

程序運行結果及所處理的XML文檔結果如圖7-15和圖7-16所示。圖7-15例7-6程序運行結果圖7-16例7-6處理的XML文檔結果7.3.6刪除節(jié)點

更改節(jié)點內容、添加節(jié)點和刪除節(jié)點是節(jié)點的三種基本操作,例7-7給出了刪除節(jié)點的范例。

【例7-7】

案例說明:該腳本實例的作用是,刪除例7-1的XML文檔“ch7-1.xml”中的元素<PublisherAddress>及其所有子節(jié)點,將刪除子節(jié)點后的XML文檔另存為新的文件。程序名稱:ch7-7.asp

01<%@language="JScript"%>

02<%

//定義變量XMLDoc

03varXMLDoc;

//將該變量賦予XMLDocument對象類型

04XMLDoc=newActiveXObject('Microsoft.XMLDOM');

//禁止異步加載,當文檔加載完畢,控制權才會返回給調用進程

05XMLDoc.async=false;

//使用Server對象的MapPath方法在服務器端加載XML文檔

06XMLDoc.load(Server.MapPath("ch7-1.xml"));//定義變量XMLNode

07varXMLNode;

//將Document元素下的根元素BookStore的第一個子元素BookInfo賦予XMLNode變量

08XMLNode=XMLDoc.documentElement.firstChild;

//將元素BookInfo的第三個子元素賦予變量XMLNode1

09varXMLNode1=XMLNode.childNodes(2);

//將BookInfo元素下的第三個子元素刪除

10XMLNode.removeChild(XMLNode1);//使用Server對象的MapPath方法獲得服務器絕對路徑

11varSavePath=Server.MapPath('/');

//存儲更改后的XML文檔

12XMLDoc.save(Server.Mappath("ch7-7.xml"));

//友好提示存儲的服務器絕對路徑

13Response.Write("文件創(chuàng)建成功,請到下列文件夾查看:<br>"+SavePath);

14%>案例分析:第09行代碼使用了節(jié)點對象的childNodes方法,括號內的索引值“2”表示取得第三個子節(jié)點元素<PublisherAddress>,該索引值從“0”開始。第10行代碼使用了節(jié)點對象removeChild方法,該方法刪除了節(jié)點<PublisherAddress>及其三個子節(jié)點<Province>、<City>和<AddressDetail>。

程序運行結果及所處理的XML文檔結果如圖7-17和圖7-18所示。圖7-17例7-7程序運行結果圖7-18例7-7處理的XML文檔結果

7.4綜合實例

本節(jié)將使用DOM技術和第6章的XSLT模板轉換技術實現XML文檔數據在客戶端的動態(tài)排序。描述圖書信息的XML文檔可以呈現為圖7-19所示的頁面。當單擊表格的標題欄時可以按該標題欄的字段對數據重新排序,排序的過程在客戶端實現,不需要與服務器進行交互。圖7-19圖書信息的動態(tài)排序

1.描述圖書信息的XML文檔

程序BookIndex.xml描述若干本圖書信息,第02行引用外部XSL文件“paixu.xsl”格式化顯示XML文檔。程序名稱:BookIndex.xml

01<?xmlversion="1.0"encoding="UTF-8"?>

02<?xml-stylesheettype="text/xsl"href="paixu.xsl"?>

03<BookList>

04<Book>

05<BookID>1</BookID>

06<Title>軟件系統開發(fā)技術(修訂版)</Title>

07<Author>潘錦平,施小英,姚天昉</Author>

08<Publisher>西安電子科技大學出版社</Publisher>09<PubDate>2001年1月</PubDate>

10<ISBN>7-5606-0492-7</ISBN>

11</Book>

12…

13</BookList>

2.格式化顯示XML的XSL文檔

程序“paixu.xsl”將XML文檔轉換為包含腳本程序的HTML文檔,轉換后的HTML文檔呈現為HTML的頁面,可以使用其中的腳本程序實現對HTML頁面的重新構造。程序名稱:paixu.xsl

01<?xmlversion="1.0"encoding="gb2312"?>

02<xsl:stylesheetversion="1.0"xmlns:xsl="/1999/XSL/Transform">

03<xsl:templatematch="/">

04<html>

05<head><title>動態(tài)排序</title>

06<style>

07table{08font-size:12px;

09border-style:solid;

10border-width:1px;

11border-color:blue;

12}

13span{

14font-size:15px;

15font:bold;

16color:red;

17}18</style>

19<script>

20functionBookSort(fieldname){

21stylesheet=document.XSLDocument;

22source=document.XMLDocument;

23sortField=

document.XSLDocument.selectSingleNode("http://xsl:sort/@select");

24sortField.value=fieldname;

25Layer1.innerHTML=

source.documentElement.transformNode(stylesheet);26}

27</script>

28</head>

29<body>

30<palign="center"><span>圖書信息動態(tài)排序</span></p>

31<divid="Layer1"name="Layer1">

32<xsl:apply-templatesselect="BookList"/>

33</div>

34</body>35</html>

36</xsl:template>

37<xsl:templatematch="BookList">

38<tablealign="center">

39<trbgcolor="#FFCC99"align="center">

40<thstyle="cursor:hand"onClick="BookSort('BookID')">編號</th>

41<thstyle="cursor:hand"onClick="BookSort('Title')">書名</th>

42<thstyle="cursor:hand"onClick="BookSort('Author')">作者</th>43<thstyle="cursor:hand"onClick="BookSort('Publisher')">出版社</th>

44<thstyle="cursor:hand"onClick="BookSort('PubDate')">出版日期</th>

45<thstyle="cursor:hand"onClick="BookSort('ISBN')">ISBN</th>

46</tr>

47<xsl:apply-templatesselect="Book">

48<xsl:sortselect="blue_ID"order="ascending"/>

49</xsl:apply-templates>50</table>

51</xsl:template>

52<xsl:templatematch="Book">

53<tralign="center"bgcolor="#eeeeee">

54<td><xsl:valu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論