一、XML DOM簡介
DOM(Document Object Model,文檔對象模型)是一種應(yīng)用程序接口(API)的應(yīng)用,它將文檔(如XML文檔,HTML文檔等)看成是一個文檔對象,然后通過程序語言(如JavaScript等腳本語言,C++等)調(diào)用該文檔對象,對文檔中的數(shù)據(jù)進行存取,并利用程序?qū)Λ@取的數(shù)據(jù)進行跟進一步的處理。
XML DOM是將XML文檔以DOM方式包裝,通過DOM技術(shù),應(yīng)用程序即可很容易地提取XML文檔中的數(shù)據(jù)。
二、XML DOM對象
IE實現(xiàn)了對XML DOM技術(shù)的支持,提供了五個可以在腳本程序中調(diào)用的XML DOM對象:
(1) XMLDOMDocument
該對象代表整個XML文檔,它具有多種屬性和方法來獲取或創(chuàng)建其他XML DOM對象。
(2) XMLDOMNode
該對象可以代表XML文檔的根元素以及根元素下的各個節(jié)點。它支持?jǐn)?shù)據(jù)類型、名域、DTD和Schema,并且以此擴展核心的XML DOM節(jié)點接口。
(3) XMLDOMNodeList
該對象代表XML文檔中一系列節(jié)點組成的一個節(jié)點列表,并且支持對該列表的遍歷。
(4) XMLDOMNamedNodeMap
該對象支持名域和對屬性集的遍歷。
(5) XMLDOMParseError
該對象用于返回最近一次解析錯誤的詳細(xì)信息,包括錯誤號、錯誤所在行、錯誤所在字符位置以及對錯誤的一個描述文本。
三、XML DOM屬性
XML DOM文檔的遍歷與HTML DOM的遍歷非常類似,因為它們都是節(jié)點層次的結(jié)構(gòu)。節(jié)點樹的最頂部是documentElement屬性,包含文檔的根元素。使用下表中所列出的屬性,可以訪問文檔中任何元素或?qū)傩浴?div style="height:15px;">
表4-1 XML DOM屬性
屬 性
描 述
attributes
包含當(dāng)前節(jié)點屬性的數(shù)組
childNodes
包含子節(jié)點數(shù)組
firstChild
指向當(dāng)前節(jié)點的第一個子節(jié)點
lastChild
指向當(dāng)前節(jié)點的最后一個子節(jié)點
nextSibling
返回當(dāng)前節(jié)點的下一個鄰居節(jié)點
nodeName
返回當(dāng)前節(jié)點的名字
nodeType
指定當(dāng)前節(jié)點的XML DOM節(jié)點類型
nodeValue
包含當(dāng)前節(jié)點的文本
ownerDocument
返回文檔的根元素
parentNode
指向當(dāng)前節(jié)點的父節(jié)點
previousSibling
返回當(dāng)前節(jié)點的前一個鄰居節(jié)點
text
返回當(dāng)前節(jié)點的內(nèi)容或當(dāng)前節(jié)點及其子節(jié)點的文本(只有IE才支持的屬性)
xml
以字符串返回當(dāng)前節(jié)點及其子節(jié)點的XML(只有IE才支持的屬性)
四、XML DOM實例
以下實例,講解如何讀取xml文件(支持IE和FireFox),并訪問節(jié)點中的信息:
XML文件:Example1.xml
<?xml version="1.0" encoding="gb2312"?>
<!--作為操作對象的XML文檔-->
<根元素>
<第2層>
<第3層>我是第三層元素集合中的第1個元素</第3層>
<第3層>我是第三層元素集合中的第2個元素</第3層>
</第2層>
</根元素>
HTML文件:readXML.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>讀取XML文件,并訪問節(jié)點信息</title>
<script language="JavaScript" for="window" event="onload">
<!--
function createDocument() {
var aVersions = [ "MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];
for (var i = 0; i < aVersions.length; i++) {
try {
var oXmlDom = new ActiveXObject(aVersions[i]);
return oXmlDom;//支持最新的版本
} catch (oError) {
// 不做任何處理
}
}
throw new Error("MSXML is not installed.");
}
var XMLdoc;
var XMLroot;
if(typeof(window.ActiveXObject) != ‘undefined‘){// 支持IE瀏覽器
XMLdoc = createDocument();
XMLdoc.async="false";
XMLdoc.load("Example1.xml");
XMLroot=XMLdoc.documentElement;
L2=XMLroot.childNodes.item(0);
L3_Node0=L2.firstChild;
strA=L3_Node0.nodeName;
strB=L3_Node0.text;
Text0.innerText=strA+" "+strB;
L3_Node1=L2.lastChild;
strA=L3_Node1.nodeName;
strB=L3_Node1.text;
Text1.innerText=strA+" "+strB;
}else if(document.implementation && document.implementation.createDocument){// 支持Mozilla Firefox瀏覽器
XMLdoc = document.implementation.createDocument("", "doc", null);
XMLdoc.async="false";
XMLdoc.load("Example1.xml");
XMLdoc.onload=function(){
x=XMLdoc.getElementsByTagName(‘第3層‘);
L3_Node0=x.item(0);
strA=L3_Node0.nodeName;
strB=L3_Node0.childNodes[0].nodeValue;
document.getElementById("Text0").textContent=strA+" "+strB;
L3_Node1=x.item(1);
strA=L3_Node1.nodeName;
strB=L3_Node1.childNodes[0].nodeValue;
document.getElementById("Text1").textContent=strA+" "+strB;
}
}
//-->
</script>
</head>
<body>
<h3 align="center">讀取XML文件,并訪問節(jié)點信息<hr/></h3>
<h4>第三層的的第一個節(jié)點:</h4>
<div id="Text0" style="font-family:華文楷體;color:red;"></div>
<h4>第三層的的第二個節(jié)點:</h4>
<div id="Text1" style="font-family:黑體;color:blue;"></div>
</body>
</html>
參考資料:《XML網(wǎng)頁開發(fā)實例教程》 機械工業(yè)出版社 尹泉等編著
網(wǎng)上資料