XML 應(yīng)用程序
本節(jié)演示由 HTML 和 JavaScript 構(gòu)建的一個(gè)小型 XML 應(yīng)用程序。
XML 文檔實(shí)例
請(qǐng)看下面這個(gè) XML 文檔 ( "cd_catalog.xml" ),它描述了一個(gè) CD 目錄:
<?xml version="1.0" encoding="ISO-8859-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>
.
.
... more ...
.
復(fù)習(xí):加載 XML 文檔
首先,讓我們復(fù)習(xí)一下之前學(xué)習(xí)過(guò)的代碼。
為了加載 XML 文檔,我們使用了與《XML 解析器》那一節(jié)中相同的代碼:
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
在本代碼執(zhí)行后,xmlDoc 成為一個(gè) XML DOM 對(duì)象,可由 JavaScript 訪(fǎng)問(wèn)。
第一步:在任意 HTML 元素中顯示 XML 數(shù)據(jù)
XML 數(shù)據(jù)可以拷貝到任何有能力顯示文本的 HTML 元素。
下面這段代碼從第一個(gè) <CD> 元素中獲得 XML 數(shù)據(jù),然后在 id="showCD" 的 HTML 元素中顯示數(shù)據(jù):
x=xmlDoc.getElementsByTagName("CD");
i=0;
function displayCD()
{
artist=(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
title=(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
year=(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue);
txt="Artist: " + artist + "<br />Title: " + title + "<br />Year: "+ year;
document.getElementById("showCD").innerHTML=txt;
}
HTML 的 body 元素包含一個(gè) onload 事件屬性,它的作用是在頁(yè)面已經(jīng)加載時(shí)調(diào)用 display() 函數(shù)。body 元素中還包含了供接受 XML 數(shù)據(jù)的 <div id='show'> 元素:
<div id="show"></div> </body>
親自試一試:XML 數(shù)據(jù)如何在 <div> 元素中顯示
本例只能顯示 XML 文檔中第一個(gè) CD 元素中的數(shù)據(jù)。為了導(dǎo)航到數(shù)據(jù)的下一行,我們需要使用更多的代碼。
第二步:添加導(dǎo)航腳本
為了向上例添加導(dǎo)航(功能),需要?jiǎng)?chuàng)建 next() 和 previous() 兩個(gè)函數(shù):
function next()
{
if (i<x.length-1)
{
i++;
displayCD();
}
}
function previous()
{
if (i>0)
{
i--;
displayCD();
}
}
next() 函數(shù)確保已到達(dá)最后一個(gè) CD 元素后不顯示任何東西,previous () 函數(shù)確保已到達(dá)第一個(gè) CD 元素后不顯示任何東西。
通過(guò)點(diǎn)擊 next/previous 按鈕來(lái)調(diào)用 next() 和 previous() 函數(shù):
<input type="button" onclick="previous()" value="previous" /> <input type="button" onclick="next()" value="next" />
親自試一試:如何在 XML 記錄中導(dǎo)航
最后:當(dāng)點(diǎn)擊 CD 時(shí)顯示專(zhuān)輯信息
只需要一點(diǎn)點(diǎn)創(chuàng)新,您就可以創(chuàng)建一個(gè)完整的應(yīng)用程序。
最后的例子展示如何在點(diǎn)擊某個(gè) CD 項(xiàng)目時(shí)顯示專(zhuān)輯信息。