注册 登录

清河洛

DOM2中的XML处理

qingheluo2016-12-16清河洛221
IE可以实现对XML字符串或XML文件的读取,其他浏览器也各自实现了对XML处理功能。DOM2级在document.implementaion中引入了createDocument()方法。IE9、Firefox、Opera、Chrome和Safari都支持这个方法一、创建XMLDOM对象var xmlDom = document.implementation.createDocument('','root',null); //创建xmlDom var user = xmlDom.createElement('user'); //...

IE可以实现对XML字符串或XML文件的读取,其他浏览器也各自实现了对XML处理功能

DOM2级在document.implementaion中引入了createDocument()方法。IE9、Firefox、Opera、Chrome和Safari都支持这个方法

一、创建XMLDOM对象

var xmlDom = document.implementation.createDocument('','root',null); //创建xmlDom
var user = xmlDom.createElement('user'); //创建user元素
xmlDom.getElementsByTagName('root')[0].appendChild(user); //添加到root下
var value = xmlDom.createTextNode('Lee'); //创建文本
xmlDom.getElementsByTagName('user')[0].appendChild(value); //添加到user下
alert(xmlDom.getElementsByTagName('user')[0].firstChild.nodeValue);

由于DOM2中不支持loadXML()方法,所以,无法简易的直接创建XML字符串。所以,只能采用DOM节点的创建和添加实现。

createDocument()方法需要传递三个参数,命名空间,根标签名和文档声明

由于JavaScript管理命名空间比较困难,所以留空即可。文档声明一般根本用不到,直接null即可。命名空间和文档声明留空,表示创建XMLDOM对象不需要命名空间和文档声明

二、载入XML:只有Mozilla的Firefox才能支持,只不过新版的Opera也是支持的,其他浏览器则不支持

DOM2只支持load()方法,载入一个同一台服务器的外部XML文件。另外,DOM2也有async属性,来表面同步或异步,默认异步

同步情况下
xmlDom.async = false;
xmlDom.load('test.xml');
alert(xmlDom.getElementsByTagName('user')[0].tagName);

异步情况下
xmlDom.async = true;
addEvent(xmlDom, 'load', function () { //异步也可以直接用onload事件
    alert(this.getElementsByTagName('user')[0].tagName);
});

xmlDom.load('test.xml');

三、DOMParser类型

由于DOM2没有loadXML()方法直接解析XML字符串,所以提供了DOMParser类型来创建XML DOM对象。IE9、Safari、Chrome和Opera都支持这个类型

var xmlParser = new DOMParser(); //创建DOMParser对象
var xmlStr = '<user>Lee</user></root>'; //XML字符串
var xmlDom = xmlParser.parseFromString(xmlStr, 'text/xml'); //创建XML DOM对象
alert(xmlDom.getElementsByTagName('user')[0].tagName); //获取user元素标签名

XML DOM对象是通过DOMParser对象中的parseFromString方法来创建的,两个参数:XML字符串和内容类型text/xml。

四、XMLSerializer类型

由于DOM2没有序列化XML的属性,所以提供了XMLSerializer类型来帮助序列化XML字符串。IE9、Safari、Chrome和Opera都支持这个类型。

var serializer = new XMLSerializer(); //创建XMLSerializer对象
var xml = serializer.serializeToString(xmlDom); //序列化XML
alert(xml);

五、解析错误

在DOM2级处理XML发生错误时,并没有提供特有的对象来捕获错误,而是直接生成另一个错误的XML文档,通过这个文档可以获取错误信息。

var errors = xmlDom.getElementsByTagName('parsererror');
if (errors.length > 0) {
    throw new Error('XML格式有误:' + errors[0].textContent);
}
errors[0].firstChild.nodeValue也使用了errors[0].textContent来代替


网址导航