document.implemention.createDocument()三个参数,分别是文档的命名空间、文档元素的标签名及一个文档类型对象
(缺省为Null,表示新文档)
var oXmlDom = documnet.implementation.createDocument("http://www.51js.com","xompactdiscs",null);
当文档创建完成后,返回该文档的引用,所以上面的oXmlDoc是一个XMLDocumnet对象,DOM为XMLDocumnet对象提供了load(方法,用来载入外部的XML文件。
oXmlDoc.load(test.xml);
oXmlDoc.async = false;同步
oXmlDoc = ture;
oXmlDoc.onload = function(){alert("done");} oXmlDoc.load("test.xml");
IE的XML DOM组件
与Mozilla支持的标准接口不同,Microsoft通过ActiveX的MSXML库向IE提供支持,如:
var oXmlDom = new ActiveXObject("msxml2.domdOCUMNET.5.0")
MSXML为XMLDOMDocument提供了两个用来加载XML文档的方法,分别是load()和loadXML(),前者和标准接口
中的load()方法一样,可以用来载入外部的XML文件,如oXmlDoc.load("test.xml");loadXML()方法则
接受表示XML文本的字符串,将它们解析成XML文档,如oXmlDoc。loadXML("<root></root>")
MSXML提供的异步回调事件是onreadystatechange事件在异步模式下,当XML DOM对象的readyState发生时
,这个事件被触发。0准备载入,1正在载入,2载入完成,3载入完成并可用,但有一部分数据也许不可用
4完全载入,完成可用
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Example 17.1 MSXML操作XML文档</title>
</head>
<script language="JavaScript">
<!--
//
// XML Data Traversal //
// (c) 2003 Premshree Pillai //
// http://www.qiksearch.com //
// http://premshree.resource-locator.com //
// Email : qiksearch@rediffmail.com //
//
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
//从文件中读取xml文档
function loadXML(xmlFile) {
//设置读取方式为同步
xmlDoc.async="false";
//注册onreadystatechange事件
xmlDoc.onreadystatechange=verify;
//从文件中读取
xmlDoc.load(xmlFile);
}
//检查文档的状态是否为完全载入
function verify() {
//虽然是同步方式,其实这个事件仍然会被触发
if(xmlDoc.readyState!=4)
return false;
}
//开始遍历文档结构树
function traverse(tree) {
//如果有子节点,遍历
if(tree.hasChildNodes()) {
//生成以HTML显示的节点信息
frames[0].document.write('<ul><li>');
frames[0].document.write('<b>'+tree.tagName+' : </b>');
var nodes=tree.childNodes.length;
//对子节点递归
for(var i=0; i<tree.childNodes.length; i++)
traverse(tree.childNodes(i));
frames[0].document.write('</li></ul>');
}
else
frames[0].document.write(tree.text);
}
//根据文件名初始化xml文档并进行遍历
function initTraverse(file) {
loadXML(file); //载入文件
var doc=xmlDoc.documentElement;
traverse(doc); //对文档结构树进行遍历
}
-->
</script>
<body>
<input id="_xmlFile" type="file" style="width:360px"></input>
<button onClick="initTraverse(_xmlFile.value)">载入</button></br>
<iframe width="400px" height="450px"></iframe>
</body>
</html>
XML DOM错误处理
oXmlDoc.async = false;
oXmlDoc.load("error.xml");
//0表示没有错误
if (oXmlDoc.parsrError != 0)
{
var oError = oXmlDoc.parseError;
alert("An error occurred:/n 错误代码:“
+oError.errorCode + "/n"
+"行数" + oError .line + "/n"
+ "列数" + oError 。linepos + ”/n“
+"原因" + oError .reason);
}
XML DOM 操作XML文档
xmlDomObject对象的documentElement属性指向XML文档的根,它的childNodes属性
引用一个XMLDOMNodelist对象,它是儿子节点的列表,通过XMLDOMNodelist对象的item()
方法可以获得制定位置商的节点(每个节点对应一个XMLDOMDode对象),这个方法的唯一参数
是一个整数,表示要获取的节点在列表中的索引,如:
var doc = xmlDomObject.documentElement;
for(var i = 0;i<doc.chindNodes.length;i++)
{alert(doc.childNodes.item(i).tagName);}
XMLDOMNode的getElementByTagName()方法用法:
var doc = xmlDomObject.documentElement;
var books = doc.getElementByTagName("book");
for(var i = 0;i < books.length; i++)
{
alert(books[i].getAttribute("author");)
}