JavaScript,XMLhtml
學習要點:node
1.IE中的XML數據庫
2.DOM2中的XMLwindows
3.跨瀏覽器處理XML數組
隨着互聯網的發展,Web應用程序的豐富,開發人員愈來愈但願可以使用客戶端來操做XML技術。而XML技術一度成爲存儲和傳輸結構化數據的標準。因此,本章就詳細探討一下JavaScript中使用XML的技術。瀏覽器
對於什麼是XML,幹什麼用的,這裏就不在贅述了,在以往的XHTML或PHP課程都有涉及到,能夠理解成一個微型的結構化的數據庫,保存一些小型數據用的。安全
一.IE中的XML服務器
在統一的正式規範出來之前,瀏覽器對於XML的解決方案各不相同。DOM2級提出了動態建立XML DOM規範,DOM3進一步加強了XML DOM。因此,在不一樣的瀏覽器實現XML的處理是一件比較麻煩的事情。app
1.建立XMLDOM對象dom
IE瀏覽器是第一個原生支持XML的瀏覽器,而它是經過ActiveX對象實現的。這個對象,只有IE有,通常是IE9以前採用。微軟當年爲了開發人員方便的處理XML,建立了MSXML庫,但卻沒有讓Web開發人員經過瀏覽器訪問相同的對象。
ActiveXObject()對象,建立xml,ActiveXObject類型,只支持IE,而且只支持IE9如下
var xmlDom = new ActiveXObject('MSXML2.DOMDocument');
ActiveXObject類型
XML版本字符串 |
說明 |
Microsoft.XmlDom |
最初隨同IE發佈,不建議使用 |
MSXML2.DOMDocument |
腳本處理而更新的版本,僅在特殊狀況做爲備份用 |
MSXML2.DOMDocument.3.0 |
在JavaScript中使用,這是最低的建議版本 |
MSXML2.DOMDocument.4.0 |
腳本處理時並不可靠,使用這個版本致使安全警告 |
MSXML2.DOMDocument.5.0 |
腳本處理時並不可靠,使用這個版本致使安全警告 |
MSXML2.DOMDocument.6.0 |
腳本可以可靠處理的最新版本 |
PS:在這六個版本中微軟只推薦三種:
1.MSXML2.DOMDocument.6.0 最可靠最新的版本
2.MSXML2.DOMDocument.3.0 兼容性較好的版本
3.MSXML2.DOMDocument 僅針對IE5.5以前的版本
這三個版本在不一樣的windows平臺和瀏覽器下會有不一樣的支持,那麼爲了實現兼容,咱們應該考慮這樣操做:從6.0->3.0->備用版本這條路線進行實現。
兼容不一樣windows平臺
alert(createXMLDOM()); //執行自定義建立xml對象函數 //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
2.載入XML
若是已經獲取了XMLDOM對象,那麼可使用loadXML()和load()這兩個方法能夠分別載入XML字符串或XML文件。
loadXML()載入xml字符串,參數是xml字符串
使用方式:
ActiveXObject()對象.loadXML('參數是xml字符串')
var xml = createXMLDOM(); //建立xml對象 xml.loadXML('<root version="1.0"><user>Lee</user></root>'); //loadXML()載入xml字符串,參數是xml字符串 alert(xml.xml); //XML屬性能夠獲取到xml代碼 //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數,建立xml對象 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
loadXML參數直接就是XML字符串,若是想效果更好,能夠添加換行符\n。.xml屬性能夠序列化XML,獲取整個XML字符串。
加載了xml後獲取xml元素和html同樣的
當你已經能夠加載了XML,那麼你就能夠用以前學習的DOM來獲取XML數據,好比標籤內的某個文本。
var xml = createXMLDOM(); //建立xml對象 xml.loadXML('<root version="1.0"><user>Lee</user></root>'); //loadXML()載入xml字符串,參數是xml字符串 var user = xml.getElementsByTagName('user')[0]; //獲取<user>節點 alert(user.tagName); //獲取<user>元素標籤 alert(user.firstChild.nodeValue); //獲取<user>裏的值Le //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數,建立xml對象 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
load()載入xml文件,參數是xml文件路徑
使用方式:
ActiveXObject()對象.load('xml文件路徑')
var xml = createXMLDOM(); //建立xml對象
xmlDom.async = false; //同步加載,在服務器測試,等待文件加載完畢後在執行代碼
xml.load('demo.xml'); //load()載入xml文件,參數是xml文件路徑 alert(xml.xml); //打印xml字符串 var user = xml.getElementsByTagName('user')[0]; //獲取<user>節點 alert(user.tagName); //獲取<user>元素標籤 alert(user.firstChild.nodeValue); //獲取<user>裏的值Le //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數,建立xml對象 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
DOM不僅僅能夠獲取XML節點,也能夠建立節點
var xmlDom = createXMLDOM(); //建立xml對象 xmlDom.async = false; //同步加載,在服務器測試,等待文件加載完畢後在執行代碼 xmlDom.load("demo.xml"); //載入xml文件 var bbb = xmlDom.createElement('bbb'); //添加一個新節點 var root = xmlDom.documentElement; //獲取根元素 root.appendChild(bbb); //將新節點添加到根節點的子節點末尾 alert(xmlDom.xml); //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數,建立xml對象 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
3.同步及異步
load()方法是用於服務器端載入XML的,而且限制在同一臺服務器上的XML文件。那麼在載入的時候有兩種模式:同步和異步。
所謂同步:就是在加載XML完成以前,代碼不會繼續執行,直到徹底加載了XML再返回。好處就是簡單方便、壞處就是若是加載的數據中止響應或延遲過久,瀏覽器會一直堵塞從而形成假死狀態。【不推薦】
xmlDom.async = false; //設置同步,false,能夠用PHP測試假死
所謂異步:就是在加載XML時,JavaScript會把任務丟給瀏覽器內部後臺去處理,不會形成堵塞,但要配合readystatechange事件使用,因此,一般咱們都使用異步方式。
xmlDom.async = true; //設置異步,默認
經過異步加載,咱們發現獲取不到XML的信息。緣由是,它並無徹底加載XML就返回了,也就是說,咱們須要在瀏覽器內部加載一點,返回一點,加載一點,返回一點。這個時候,咱們須要判斷是否徹底加載,而且可使用了,再進行獲取輸出。配合readystatechange事件使用【推薦】
XML DOM中onreadystatechange事件
就緒狀態 |
說明 |
1 |
DOM正在加載 |
2 |
DOM已經加載完數據 |
3 |
DOM已經可使用,但某些部分還沒法訪問 |
4 |
DOM已經徹底能夠 |
PS:readyState能夠獲取就緒狀態值 |
onreadystatechange事件,xml對象事件,當加載外部xml文件是激發,經過readyState屬性能夠獲取xml文件加載的狀態,見上表
使用方式:
寫在加載文件的前面
xml對象.onreadystatechange = 執行函數
readyState屬性,能夠獲取到經過onreadystatechange事件加載的xml文件狀態,寫在事件函數裏面,返回狀態碼見上表
使用方式:
xml對象.readyState
解決異步不能加載完畢的問題
var xmlDom = createXMLDOM(); //建立xml對象 xmlDom.async = true; //異步加載 xmlDom.onreadystatechange = function () { //onreadystatechange事件,xml對象事件,當加載外部xml文件是激發 if (xmlDom.readyState == 4){ //readyState屬性,能夠獲取到經過onreadystatechange事件加載的xml文件狀態 //判斷當xml文件加載完畢後,打印出xml裏的代碼 alert(xmlDom.xml); } }; xmlDom.load("demo.xml"); //載入xml文件 //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數,建立xml對象 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
PS:能夠經過readyState來了解事件的執行次數,將load()方法放到最後不會由於代碼的順序而致使沒有加載。而且load()方法必須放在onreadystatechange以後,才能保證就緒狀態變化時調用該事件處理程序,由於要先觸發
雖然能夠經過XML DOM文檔加載XML文件,但公認的仍是XMLHttpRequest對象比較好。這方面內容,咱們在Ajax章節詳細瞭解。
2.解析錯誤
在加載XML時,不管使用loadXML()或load()方法,都有可能遇到XML格式不正確的狀況。爲了解決這個問題,微軟的XML DOM提供了parseError屬性。
parseError屬性對象
屬性 |
說明 |
errorCode |
發生的錯誤類型的數字代號,沒有錯誤返回0 |
filepos |
發生錯誤文件中的位置 |
line |
錯誤行號 |
linepos |
遇到錯誤行號那一行上的字符的位置 |
reason |
錯誤的解釋信息 |
parseError屬性對象,是處理加載xml文件時遇到錯誤的對象,對象下有5個屬性分別返回錯誤類型,見上表
使用方式:
xml對象.parseError.錯誤屬性
var xmlDom = createXMLDOM(); //建立xml對象 xmlDom.async = true; //異步加載 xmlDom.onreadystatechange = function () { //onreadystatechange事件,xml對象事件,當加載外部xml文件是激發 if (xmlDom.readyState == 4) { //readyState屬性,能夠獲取到經過onreadystatechange事件加載的xml文件狀態 //判斷當xml文件加載完畢後,執行裏面代碼 if (xmlDom.parseError.errorCode == 0) { //判斷文件是否有錯 //若是沒有錯誤,打印出xml代碼 alert(xmlDom.xml); } else { //若是有錯誤 //建立一個錯誤對象,打印出相應的錯誤類型 throw new Error('錯誤行號:' + xmlDom.parseError.line + '\n錯誤代號:' + xmlDom.parseError.errorCode + '\n錯誤解釋:' + xmlDom.parseError.reason); } } }; xmlDom.load("demo.xml"); //載入xml文件 //兼容不一樣windows平臺 function createXMLDOM() { //自定義函數,建立xml對象 var version = [ //建立數組,元素是ActiveXObject類型 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i ++) { //根據數組的長度循環次數 try { //嘗試執行循環到的ActiveXObject類型 var xmlDom = new ActiveXObject(version[i]); //執行成功 return xmlDom; //返回建立xml對象,而且退出當前函數 } catch (e) { //若是出錯 //跳過 } } //建立一個錯誤對象,拋出錯誤 throw new Error('您的系統或瀏覽器不支持MSXML!'); //循環後拋出錯誤 }
二.DOM2中的XML
DOM2中沒法實現字符串方式建立xml對象
IE能夠實現了對XML字符串或XML文件的讀取,其餘瀏覽器也各自實現了對XML處理功能。DOM2級在document.implementaion中引入了createDocument()方法。IE九、Firefox、Opera、Chrome和Safari都支持這個方法。
implementaion對象,xml對象
使用方式;
document.implementaion.createDocument()
createDocument()方法,建立xml對象,3個參數,參數一命名空間xml沒有命名空間留空字符串,參數二xml根標籤,參數三文檔聲明,沒有文檔聲明寫null
使用方式:
document.implementaion.createDocument('',xml根標籤,null)
1.建立XMLDOM對象
//1.建立XMLDOM對象 var xmlDom = document.implementation.createDocument('','root',null); //建立xmlDom var us = xmlDom.createElement('us'); //建立us新元素節點 xmlDom.getElementsByTagName('root')[0].appendChild(us); //將新元素節點添加到root下 var value = xmlDom.createTextNode('Lee'); //建立文本節點 xmlDom.getElementsByTagName('us')[0].appendChild(value); //將文本節點添加到us下 alert(xmlDom.getElementsByTagName('root')[0].tagName); //打印出根元素的標籤名稱 alert(xmlDom.getElementsByTagName('us')[0].firstChild.nodeValue); //打印出user元素的標籤下的文本節點值
PS:因爲DOM2中不支持loadXML()方法,因此,沒法簡易的直接建立XML字符串。因此,只能採用以上的作法。
PS:createDocument()方法須要傳遞三個參數,命名空間,根標籤名和文檔聲明,因爲JavaScript管理命名空間比較困難,因此留空便可。文檔聲明通常根本用不到,直接null便可。命名空間和文檔聲明留空,表示建立XMLDOM對象不須要命名空間和文檔聲明。
PS:命名空間的用途是防止太多的重名而進行的分類,文檔類型代表此文檔符合哪一種規範,而這裏建立XMLDOM不須要使用這兩個參數,因此留空便可。
2.載入XML
DOM2只支持load()方法,載入一個同一臺服務器的外部XML文件。固然,DOM2也有async屬性,來表面同步或異步,默認異步。
無論在同步或異步來獲取load()方法只有Mozilla的Firefox才能支持,只不過新版的Opera也是支持的,其餘瀏覽器則不支持
同步狀況下
//同步狀況下 var xmlDom = document.implementation.createDocument('','root',null); //建立xml對象 xmlDom.async = false; //加載文件方式同步,加載XML完成以前,代碼不會繼續執行,直到徹底加載了XML再返回 xmlDom.load('demo.xml'); //加載xml文件 alert(xmlDom.getElementsByTagName('user')[0].tagName); //獲取user標籤的,標籤名稱
異步狀況下
//異步狀況下 var xmlDom = document.implementation.createDocument('', 'root', null); xmlDom.async = true; //異步 addEvent(xmlDom, 'load', function () { //異步直接用onload便可,等待頁面加載完畢後執行函數 alert(this.getElementsByTagName('user')[0].tagName); //打印當前xml對象裏,user元素的,標籤名稱 }); xmlDom.load('demo.xml'); //加載xml文件 //跨瀏覽器添加事件,添加事件兼容 function addEvent(obj, type, fn) { //添加事件函數,接收3個參數,1事件對象,2事件名稱,3事件函數 //判斷瀏覽器若是支持w3c if (obj.addEventListener) { //就用w3c的addEventListener方法添加對象,將事件名稱和事件函數傳入添加事件 obj.addEventListener(type, fn, false); } else if (obj.attachEvent) { //判斷若是瀏覽器是IE9如下,就用IE的方法attachEvent添加事件 //將事件名稱和事件函數傳入建立對象 obj.attachEvent('on' + type, fn); } }
PS:無論在同步或異步來獲取load()方法只有Mozilla的Firefox才能支持,只不過新版的Opera也是支持的,其餘瀏覽器則不支持。
3.DOMParser類型,用於定義字符串方式xml
因爲DOM2沒有loadXML()方法直接解析XML字符串,因此提供了DOMParser類型來建立XML DOM對象。IE九、Safari、Chrome和Opera都支持這個類型。DOMParser下面有一個方法parseFromString()建立xml對象
parseFromString()方法,建立xml對象,用於建立DOMParser類型的xml對象,有兩個參數,參數一是xml字符串,參數二是xml類型text/xml
使用方式:
DOMParser對象.parseFromString(xml字符串,'text/xml')
var xmlParser = new DOMParser(); //建立DOMParser對象 //建立xml字符串 var xmlStr = '<root><user>Lee</user></root>'; //XML字符串 var xmlDom = xmlParser.parseFromString(xmlStr, 'text/xml'); //建立XML DOM對象 alert(xmlDom.getElementsByTagName('user')[0].tagName); //獲取user元素標籤名
PS:XML DOM對象是經過DOMParser對象中的parseFromString方法來建立的,兩個參數:XML字符串和內容類型text/xml。
4.XMLSerializer類型,用於序列化XML輸出
因爲DOM2沒有序列化XML的屬性,因此提供了XMLSerializer類型來幫助序列化XML字符串。IE九、Safari、Chrome和Opera都支持這個類型。XMLSerializer類型下面有一個serializeToString()方法序列化XML
serializeToString()方法,用於序列化XML輸出,有一個參數xml對象DOM
使用方式:
XMLSerializer對象.serializeToString(xml對象DOM)
var xmlParser = new DOMParser(); //建立DOMParser對象 //建立xml字符串 var xmlStr = '<root><user>Lee</user></root>'; //XML字符串 var xmlDom = xmlParser.parseFromString(xmlStr, 'text/xml'); //建立XML DOM對象 var serializer = new XMLSerializer(); //建立XMLSerializer對象 var xml = serializer.serializeToString(xmlDom); //序列化XML alert(xml); //序列化打印出xml
5.解析錯誤
在DOM2級處理XML發生錯誤時,並無提供特有的對象來捕獲錯誤,而是直接生成另外一個錯誤的XML文檔,經過這個文檔能夠獲取錯誤信息。
var xmlParser = new DOMParser(); //建立DOMParser對象 //建立xml字符串 var xmlStr = '<user>Lee</user></root>'; //XML字符串 var xmlDom = xmlParser.parseFromString(xmlStr, 'text/xml'); //建立XML DOM對象 var serializer = new XMLSerializer(); //建立XMLSerializer對象 var xml = serializer.serializeToString(xmlDom); //序列化XML //獲取xml錯誤序列化後的錯誤文件parsererror標籤,標籤裏面是錯誤信息 var errors = xmlDom.getElementsByTagName('parsererror'); if (errors.length > 0) { //判斷錯誤文件標籤大於0說明xml有錯誤 //建立一個錯誤對象,獲取第一個parsererror標籤,而且獲取到標籤的文本內容 throw new Error('XML格式有誤:' + errors[0].textContent); } alert(xml); //序列化打印出xml,若是出錯會獲得一個錯誤文件
PS:errors[0].firstChild.nodeValue也可使用errors[0].textContent來代替。
三.跨瀏覽器處理XML
若是要實現跨瀏覽器就要思考幾個個問題:1.load()只有IE、Firefox、Opera支持,因此沒法跨瀏覽器;2.獲取XML DOM對象順序問題,先判斷先進的DOM2的,而後再去判斷落後的IE;3.針對不一樣的IE和DOM2級要使用不一樣的序列化。4.針對不一樣的報錯進行不一樣的報錯機制。
var xml = '<root><user>Lee</user></root>'; //定義xml字符串 var xmldom = getXMLDOM(xml); //建立XML DOM對象,接收xml字符串 alert(serializeXML(xmldom)); //打印序列化xml,接收XML DOM對象 //首先,咱們須要跨瀏覽器獲取XML DOM function getXMLDOM(xmlStr) { //自定義跨瀏覽器建立xml DOM對象,接收一個參數xml字符串 var xmlDom = null; //初始化一個對象 if (typeof window.DOMParser != 'undefined') { //判斷DOMParser類型不等於undefined說明支持 //建立DOMParser對象,而且建立xml DOM對象 xmlDom = (new DOMParser()).parseFromString(xmlStr, 'text/xml'); //獲取錯誤信息的parsererror標籤 var errors = xmlDom.getElementsByTagName('parsererror'); //判斷錯誤信息標籤返回集合長度大於0,說明xml有錯誤 if (errors.length > 0) { //建立一個錯誤對象,獲取到第一個錯誤標籤,而且獲取到他的文本內容 throw new Error('XML解析錯誤:' + errors[0].firstChild.nodeValue); } //若是不支持DOMParser類型,嘗試IE的方法 } else if (typeof window.ActiveXObject != 'undefined') { //判斷ActiveXObject類型不等於undefined說明支持 var version = [ //建立一個數組,元素分別爲3個xml版本 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; for (var i = 0; i < version.length; i++) { //根據數組的長度循環次數 try { //嘗試着執行每次循環到的xml版本,建立xml對象 xmlDom = new ActiveXObject(version[i]); } catch (e) { //若是出錯跳過執行第二次循環 //跳過 } } xmlDom.loadXML(xmlStr); //載入xml字符串 if (xmlDom.parseError != 0) { //判斷載入xml錯誤返回代碼,若是不等於0說明xml有錯 //建立一個錯誤對象,返回錯誤的解釋信息 throw new Error('XML解析錯誤:' + xmlDom.parseError.reason); } } else { //若是 上面兩種方式都不支持 //建立一個錯誤對象,拋出您所使用的系統或瀏覽器不支持XML DOM! throw new Error('您所使用的系統或瀏覽器不支持XML DOM!'); } return xmlDom; //最後返回建立的xmlDOM對象 } //其次,咱們還必須跨瀏覽器序列化XML function serializeXML(xmlDom) { //序列化xml函數,接收xmlDOM對象對象 var xml = ''; //初始化一個變量等於空字符串 if (typeof XMLSerializer != 'undefined') { //判斷XMLSerializer類型,不等於undefined,說明支持序列化 //給xml從新賦值,建立XMLSerializer對象,而且使用serializeToString方法序列化 xml = (new XMLSerializer()).serializeToString(xmlDom); //若是不支持XMLSerializer類型 } else if (typeof xmlDom.xml != 'undefined') { //判斷IE方式xmlDOM對象下的xml屬性是否等於undefined,不等於說明支持 //給xml從新賦值,序列化xml xml = xmlDom.xml; } else { //若是上面兩種都不支持 //建立一個錯誤對象,拋出沒法解析XML!錯誤信息 throw new Error('沒法解析XML!'); } return xml; //最後返回序列化 }
PS:因爲兼容性序列化過程有必定的差別,可能返回的結果字符串可能會有一些不一樣。至於load()加載XML文件則由於只有部分瀏覽器支持而沒法跨瀏覽器。