JavaScript操作XML(一)
IE篇
Miscrosoft基于ActiveX来操作XML的库叫MSXML,而要用XML的操作,用户需要安装MSXML,不过IE5.0或以上都已在其浏览器嵌入了MSXML;到目前为止已有很多个版本了,最初的版本叫Microsoft.XmlDom,建立其对象实例可以这样写:
var oXmlDom = new ActiveXObject("Miscrosoft.XmlDom");
目前MSXML版本已民展到5.0了,以下是其可用的版本:
❑ Microsoft.XmlDom (original)
❑ MSXML2.DOMDocument
❑ MSXML2.DOMDocument.3.0
❑ MSXML2.DOMDocument.4.0
❑ MSXML2.DOMDocument.5.0
因为新版本的MSXML可能会提升其速度或支持一些特性比如校验,一般来说,我们当然希望用到最新的版本,所以我们可以这样来创建客户端浏览器支持MSXML的最新版本:
function createXMLDOM()
{
var arrSignatures = ["MSXML2.DOMDocument.5.0",
"MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0",
"MSXML2.DOMDocument",
"Microsoft.XmlDom"];
for (var i = 0;i < arrSignatures.length; i++)
{
try
{
var oXmlDom = new ActiveXObject(arrSignatures[i]);
return oXmlDom;
}
catch(oError)
{
//ignore
}
throw new Error("MSXML is not installed on your system.");
}
}
{
var arrSignatures = ["MSXML2.DOMDocument.5.0",
"MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0",
"MSXML2.DOMDocument",
"Microsoft.XmlDom"];
for (var i = 0;i < arrSignatures.length; i++)
{
try
{
var oXmlDom = new ActiveXObject(arrSignatures[i]);
return oXmlDom;
}
catch(oError)
{
//ignore
}
throw new Error("MSXML is not installed on your system.");
}
}
#加裁XML
我们可以用loadXML()或load()方法来加载XML
例如:
var oXmlDom = createXMLDOM();
oXmlDom.loadXML("<root><child/></root>");
oXmlDom.load("test.xml");
加载XML支持同步和异步加载,MSXML默认是异步加载XML文件的,若要同步加载XML文件可以这样做:oXmlDom.loadXML("<root><child/></root>");
oXmlDom.load("test.xml");
oXmlDom.async = false;
在加载XML文件时可以选部分、相对、绝对路径如:
oXmlDom.load("test.xml");
oXmlDom.load("../test.xml");
oXmlDom.load("http://test.xml");
加载XML文件时有个状态属性叫做readyState,其有五个值:
❑ 0 — The DOM hasn’t been initialized with any information.
❑ 1 — The DOM is loading data.
❑ 2 — The DOM has completed loading the data.
❑ 3 — The DOM may be used although some sections may not be available.
❑ 4 — The DOM is completely loaded and ready to be used.
当readyState的值改变值会触发一个onreadystatechange事件:
oXmlDom.onreadystatechange = function()
{
/**
* readyState:
* 0-- The Dom hasn't been initialized with any information
* 1-- The Dom is loading data;
* 2-- The Dom has completed loading the data;
* 3-- The Dom may be usedd although some sections mays not be avaible;
* 4-- Th Dom is complately loaded and ready to be used;
*/
alert(oXmlDom.readyState);
}
{
/**
* readyState:
* 0-- The Dom hasn't been initialized with any information
* 1-- The Dom is loading data;
* 2-- The Dom has completed loading the data;
* 3-- The Dom may be usedd although some sections mays not be avaible;
* 4-- Th Dom is complately loaded and ready to be used;
*/
alert(oXmlDom.readyState);
}
当我们加载完XML文件后如何取得XML文件的值呢?
我们可以用这样的语句:alert(oXmlDom.xml);