/**
* 1.跨浏览器处理xml
* 2.load方法只有IE,firefox,opera支持,所有无法跨浏览器
* 3.xmldom对象顺序问题,先进行先进的dom2,再去判断其他的IE
* 4.不同浏览器不同的序列化操作
* 5.不同报错,进行不同的报错机制
*/
/**
* 1.跨浏览器获取xmldom
*/
function getXMLDOM(xmlStr) {
var xmlDom = null;
// 标准的w3c浏览器创建DOMParser对象
if (typeof window.DOMParser != 'undefined') {
// DOMParser对象中的方法parseFromString();接收两个参数来创建xmldom对象
xmlDom = (new DOMParser()).parseFromString(xmlStr, 'text/xml');
// 如果产生错误会是一个新的文档parsererror
// HTMLCollection[parsererror]
// 错误文档是<parsererror>这里是内容</pasererror>
var errors = xmlDom.getElementsByTagName('parsererror');
console.log(errors);
if (errors.length > 0) {
throw new Error('XML解析错误:' +
errors[0].firstChild.nodeValue);
}
} else if (typeof window.ActiveXObject != 'undefinded') {
// IE8和以下
var version = [
// 版本顺序6.0推荐并且稳定,3.0最低推荐,最后一个特殊情况下用的
'MSXML2.DOMDocument6.0',
'MSXML2.DOMDocument3.0',
'MSXML2.DOMDocument'
];
for (var i = 0, len = version.length; i < len; i++) {
try {
// 判断支持哪个版本
var xmlDom = new ActiveXObject(version[i]);
} catch (e) {}
}
// 加载xml字符串
xmlDom.loadXML(xmlStr);
// IE8和以下错误属性对象parseError
// 这个属性有多个对象
// errorCode发生错误类型代号
// filepos发生错误文件中的位置
// line错误行号
// linepos错误行号,那一行上的字符的位置
// resion错误的解释原因
// alert(xmlDom.parseError);
// 等于0的时候才是正确的xml字符串
if (xmlDom.parseError != 0) {
throw new Error('XML解析错误:' + xmlDom.parseError.reason);
}
} else {
throw new Error('您的系统或浏览器不支持xmldom!');
}
return xmlDom;
}
// alert(getXMLDOM('<root><user>邓志强getXMLDOM</user></root>').documentElement.tagName);
// alert(window.DOMParser);
//PS:为了跨越所有浏览器兼容,我们放弃了从外部加载XML文件,而使用了字符串XML加载和序列化。
function serializerXML(xmlDom) {
var xml = '';
// w3c的XMLSerializer序列化方法
// new XMLSerializer()创建一个序列化对象
// 序列化xmldom对象
if (typeof window.XMLSerializer != 'undefined') {
xml = (new XMLSerializer()).serializeToString(xmlDom);
} else if (typeof xmlDom.xml != 'undefined') {
// IE的序列化方法
xml = xmlDom.xml;
}
return xml;
}
getXMLDOM('<root><user>邓志强getXMLDOM</user></root>');
跨浏览器处理xml 兼容IE
最新推荐文章于 2019-01-22 10:15:35 发布