跨瀏覽器處理xml 相容IE
阿新 • • 發佈:2019-01-29
/**
* 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>');