軟體測試常用檔案之XML

千鋒教育官方發表於2019-09-17

  

  隨著網際網路的發展, Web 應用程式的豐富,開發人員越來越希望能夠使用客戶端來操作 XML 技術。而 XML 技術一度成為儲存和傳輸結構化資料的標準。

 

  一.IE 中的 XML

 

  在統一的正式規範出來以前,瀏覽器對於XML 的解決方案各不相同。 DOM2 級提出了動態建立 XML DOM 規範, DOM3 進一步增強了 XML DOM 。所以,在不同的瀏覽器實現 XML 的處理是一件比較麻煩的事情。

 

  1. 建立 XMLDOM 物件

 

  IE 瀏覽器是第一個原生支援 XML 的瀏覽器,而它是透過 ActiveX 物件實現的。這個物件,只有 IE 有,一般是 IE9 之前採用。微軟當年為了開發人員方便的處理 XML ,建立了 MSXML 庫,但卻沒有讓 Web 開發人員透過瀏覽器訪問相同的物件。

 

  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 之前的版本

 

  PS :這三個版本在不同的 windows 平臺和瀏覽器下會有不同的支援,那麼為了實現相容,我們應該考慮這樣操作:從 6.0->3.0-> 備用版本這條路線進行實現。

 

  function createXMLDOM(){

 

  var version=[

 

  'MSXML2.DOMDocument.6.0',

 

  'MSXML2.DOMDocument.3.0',

 

  'MSXML2.DOMDocument'

 

  ];

 

  for(var i=0;i<version.length;i++){

 

  try{

 

  var xmlDom=new ActiveXObject(version<i>);

 

  return xmlDom;

 

  }catch(e){

 

  // 跳過

 

  }

 

  }

 

  throw new Error(' 您的系統或瀏覽器不支援 MSXML ');// 迴圈後丟擲錯誤

 

  }

 

  2. 載入 XML

 

  如果已經獲取了XMLDOM 物件,那麼可以使用 loadXML() load() 這兩個方法可以分別載入 XML 字串或 XML 檔案。

 

  xmlDom.loadXML('<root version="1.0"><user>Lee</user></root>');

 

  alert(xmlDom.xml);

 

  PS loadXML 引數直接就是 XML 字串,如果想效果更好,可以新增換行符 \n .xml 屬性可以序列化 XML ,獲取整個 XML 字串。

 

  xmlDom.load('test.xml');// 載入一個 XML 檔案

 

  alert(xmlDom.xml);

 

  當你已經可以載入了XML ,那麼你就可以用之前學習的 DOM 來獲取 XML 資料,比如標籤內的某個文字。

 

  var user=xmlDom.getElementsByTagName('user')[0];// 獲取 <user> 節點

 

  alert(user.tagName);// 獲取 <user> 元素標籤

 

  alert(user.firstChild.nodeValue);// 獲取 <user> 裡的值 Lee

 

  DOM 不單單可以獲取 XML 節點,也可以建立。

 

  var email=xmlDom.createElement('email');

 

  xmlDom.documentElement.appendChild(email);

 

  3. 同步及非同步

 

  load() 方法是用於伺服器端載入 XML 的,並且限制在同一臺伺服器上的 XML 檔案。那麼在載入的時候有兩種模式:同步和非同步。

 

  所謂同步:就是在載入XML 完成之前,程式碼不會繼續執行,直到完全載入了 XML 再返回。好處就是簡單方便、壞處就是如果載入的資料停止響應或延遲太久,瀏覽器會一直堵塞從而造成假死狀態。

 

  xmlDom.async=false;// 設定同步, false ,可以用 PHP 測試假死

 

  所謂非同步:就是在載入XML 時, JavaScript 會把任務丟給瀏覽器內部後臺去處理,不會造成堵塞,但要配合 readystatechange 事件使用,所以,通常我們都使用非同步方式。

 

  xmlDom.async=true;// 設定非同步,預設

 

  透過非同步載入,我們發現獲取不到XML 的資訊。原因是,它並沒有完全載入 XML 就返回了,也就是說,在瀏覽器內部載入一點,返回一點,載入一點,返回一點。這個時候,我們需要判斷是否完全載入,並且可以使用了,再進行獲取輸出。

 

  XML DOM readystatechange 事件

 

  就緒狀態說明

 

  1DOM 正在載入

 

  2DOM 已經載入完資料

 

  3DOM 已經可以使用,但某些部分還無法訪問

 

  4DOM 已經完全可以

 

  PS readyState 可以獲取就緒狀態值

 

  var xmlDom=createXMLDOM();

 

  xmlDom.async=true;// 非同步,可以不寫

 

  xmlDom.>

 

  if(xmlDom.readyState==4){// 完全載入了,再去獲取 XML

 

  alert(xmlDom.xml);

 

  }

 

  }

 

  xmlDom.load('test.xml');// 放在後面重點體現非同步的作用


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2657267/,如需轉載,請註明出處,否則將追究法律責任。

相關文章