1. 程式人生 > >DOM2級中的XML

DOM2級中的XML

異步加載 同步 text parse ring 外部文件 ati alert 模擬

針對非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);

DOM2級中的XML