针对非IE浏览器的其他浏览器,即属于DOM2级浏览器(opera、firefox、chrome、safair),DOM2级使用document.implementation对象中的creatDocument()方法来创建xmlDom。
1、创建xmlDom
var xmlDom = document.implementation.creatDocument(‘‘,‘root‘,null); //创建xmldom,并且提供了跟标签root
第一个参数:命名空间;
第二个参数:xml文件的跟标签;
第三个参数:文档声明。
2、使用标准的DOM创建节点
var xmlDom = document.implementation.creatDocument(‘‘,‘root‘,null);
var user = xmlDom.creatElement(‘user‘);
xmlDom.appendChild(user);
var userText = xmlDom.creatTextNode(‘lql‘);
user.appendChild(userText);
PS:DOM2级中的xmlDom无法通过loadxml()方法直接用字符串创建xml文档。支持load()方法载入外部文件
一:同步加载文件,使用load()方法
var xmlDom = document.implementation.creatDocument(‘‘,‘root‘,null);
xmlDom.async = false;
var user = xmlDom.creatElement(‘user‘);
xmlDom.appendChild(user);
xmlDom.load(‘demo.xml‘);
alert(xmlDom.getElementByTagName(‘user‘)[0].tagName); //输出user
PS:DOM2级没有xml属性进行序列化排序
二:异步加载文件,使用load()方法
var xmlDom = document.implementation.creatDocument(‘‘,‘root‘,null);
xmlDom.async = true;
xmlDom.onload = function(){
alert(xmlDom.getElementByTagName(‘user‘)[0].textContent);
}
xmlDom.load("demo.xml");
PS:load()方法只支持firefox浏览器和新版本的opera浏览器,其他浏览器不支持。
问题总结:
1、不能使用字符串来创建xml,比如类似IE中的loadxml()方法;
2、不能使用xml属性序列化字符标签
解决问题1://模拟loadxml()方法创建xml字符串
var xmlParse = new DOMParse();
var xmlStr = ‘<root><user>lql</user></root>‘;
var xmlDom = xmlParse.parseFromString(xmlStr,‘text/xml‘);
alert(xmlDom.getElementByTagName(‘user‘)[0].tagName);
解决问题2://模拟xml属性序列化字符标签
var serializer = new XMLSerializer();
var xml = serializer.serializerToString(xmlDom);
alert(xml);