一、XML DOM簡(jiǎn)介
DOM(Document Object Model,文檔對象模型)是一種應用程序接口(API)的應用,它將文檔(如XML文檔,HTML文檔等)看成是一個(gè)文檔對象,然后通過(guò)程序語(yǔ)言(如JavaScript等腳本語(yǔ)言,C++等)調用該文檔對象,對文檔中的數據進(jìn)行存取,并利用程序對獲取的數據進(jìn)行跟進(jìn)一步的處理。
XML DOM是將XML文檔以DOM方式包裝,通過(guò)DOM技術(shù),應用程序即可很容易地提取XML文檔中的數據。
二、XML DOM對象
IE實(shí)現了對XML DOM技術(shù)的支持,提供了五個(gè)可以在腳本程序中調用的XML DOM對象:
(1) XMLDOMDocument
該對象代表整個(gè)XML文檔,它具有多種屬性和方法來(lái)獲取或創(chuàng )建其他XML DOM對象。
(2) XMLDOMNode
該對象可以代表XML文檔的根元素以及根元素下的各個(gè)節點(diǎn)。它支持數據類(lèi)型、名域、DTD和Schema,并且以此擴展核心的XML DOM節點(diǎn)接口。
(3) XMLDOMNodeList
該對象代表XML文檔中一系列節點(diǎn)組成的一個(gè)節點(diǎn)列表,并且支持對該列表的遍歷。
(4) XMLDOMNamedNodeMap
該對象支持名域和對屬性集的遍歷。
(5) XMLDOMParseError
該對象用于返回最近一次解析錯誤的詳細信息,包括錯誤號、錯誤所在行、錯誤所在字符位置以及對錯誤的一個(gè)描述文本。
三、XML DOM屬性
XML DOM文檔的遍歷與HTML DOM的遍歷非常類(lèi)似,因為它們都是節點(diǎn)層次的結構。節點(diǎn)樹(shù)的最頂部是documentElement屬性,包含文檔的根元素。使用下表中所列出的屬性,可以訪(fǎng)問(wèn)文檔中任何元素或屬性。
表4-1 XML DOM屬性
屬 性
描 述
attributes
包含當前節點(diǎn)屬性的數組
childNodes
包含子節點(diǎn)數組
firstChild
指向當前節點(diǎn)的第一個(gè)子節點(diǎn)
lastChild
指向當前節點(diǎn)的最后一個(gè)子節點(diǎn)
nextSibling
返回當前節點(diǎn)的下一個(gè)鄰居節點(diǎn)
nodeName
返回當前節點(diǎn)的名字
nodeType
指定當前節點(diǎn)的XML DOM節點(diǎn)類(lèi)型
nodeValue
包含當前節點(diǎn)的文本
ownerDocument
返回文檔的根元素
parentNode
指向當前節點(diǎn)的父節點(diǎn)
previousSibling
返回當前節點(diǎn)的前一個(gè)鄰居節點(diǎn)
text
返回當前節點(diǎn)的內容或當前節點(diǎn)及其子節點(diǎn)的文本(只有IE才支持的屬性)
xml
以字符串返回當前節點(diǎn)及其子節點(diǎn)的XML(只有IE才支持的屬性)
四、XML DOM實(shí)例
以下實(shí)例,講解如何讀取xml文件(支持IE和FireFox),并訪(fǎng)問(wèn)節點(diǎn)中的信息:
XML文件:Example1.xml
<?xml version="1.0" encoding="gb2312"?>
<!--作為操作對象的XML文檔-->
<根元素>
<第2層>
<第3層>我是第三層元素集合中的第1個(gè)元素</第3層>
<第3層>我是第三層元素集合中的第2個(gè)元素</第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文件,并訪(fǎng)問(wèn)節點(diǎn)信息</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文件,并訪(fǎng)問(wèn)節點(diǎn)信息<hr/></h3>
<h4>第三層的的第一個(gè)節點(diǎn):</h4>
<div id="Text0" style="font-family:華文楷體;color:red;"></div>
<h4>第三層的的第二個(gè)節點(diǎn):</h4>
<div id="Text1" style="font-family:黑體;color:blue;"></div>
</body>
</html>
參考資料:《XML網(wǎng)頁(yè)開(kāi)發(fā)實(shí)例教程》 機械工業(yè)出版社 尹泉等編著(zhù)
網(wǎng)上資料