javascript操作xml文件教程

发布时间:2020-12-08编辑:脚本学堂
本文介绍了javascript编程中操作xml文件的方法,通过一个实例来具体了解关于javascript来操作xml文件特性,有需要的朋友参考下。

例1,跨浏览器读取xml文件。
 

复制代码 代码示例:
<html> 
<head> 
    <script type="text/javascript"> 
        function createdocument() 
        { 
            var xmldoc; 
            if(window.activexobject)//ie中依靠activexobject()对象和msxml库来获取和打开xml文档 
            { 
                var versions=[ 
                            "msxml2.domdocument.6.0",//msxml库有多种版本,一般只检查这两个 
                            "msxml2.domdocument.3.0"//优先新版 
                             ]; 
                for(var i=0;i<versions.length;i++) 
                { 
                    try 
                    { 
                        xmldoc=new activexobject(versions[i]);//用activexobject对象构造函数, 
                        return xmldoc;//需要传入一个包含activex对象版本的字符串 
                    } 
                    catch (error)//若创建activex对象失败,则转入这里,但是什么也不做 
                    { 
                        //do nothing here 
                    } 
                }  www.jb200.com
            } 
            else if(document.implementation && document.implementation.createdocument) 
            {//适用于firefox、opera,依然不适用safari和chrome 
                xmldoc=document.implementation.createdocument("","",null); 
                return xmldoc; 
            } 
            return null; 
        } 
        function getdailymessage() 
        { 
            var messages=xmldoc.getelementsbytagname("daily"); 
            //注意此处使用的xmldoc在此函数中没有定义,那么来自哪里呢? 
            //在html页面正文中定义的xmldoc全局变量 
            var dateobj=new date(); 
            var today=dateobj.getday(); 
            return messages[today].firstchild.nodevalue; 
        } 
    </script> 
</head> 
<body> 
    <div id="messagecontainer"></div> 
    <script type="text/javascript"> 
        var xmldoc=createdocument();//全局变量,同样用于getdailymessage函数中 
        xmldoc.async=false;//解释见下面 
        xmldoc.load("motd.xml"); 
        document.getelementbyid("messagecontainer").innerhtml=getdailymessage(); 
    </script> 
</body> 
</html> 

在实际操作xml文件之前,先确保该文档已经完全加载到客户端的浏览器缓存中。
否则,脚本在xml文件下载完成之前操作,会抛出javascript错误。

可以使用async避免这样的错误(通用方法)。
async属性表示浏览器下载页面其余部分之前,是否等待指定的xml文档下载完。这个属性表示“异步(asynchronous)”。默认值是true,表示浏览器无需等待xml文档完全下载。因此只要我们将其值设置为false,就可以避免前面的问题。

在ie中可使用readystate属性
ie的xml对象和很多的html对象都有readystate属性,用于返回对象之前的加载状态。

readystate属性的可能的返回值如下:
1 //对象正在初始化,尚无任何可读数据,正在载入数据(loading)
2 //对象正在载入对象并解析(loaded)
3 //部分对象的数据已经读取并解析,因此对象模型是可用的。
//但是仍无法读取完整的对象数据(interactive)
4 //对象已经载入,内容已经完全解析完毕(completed)
在这里只需要关注一个等于4的状态就行了。
举例:
 

复制代码 代码示例:
function xmldoc_readystatechange()
{
if(xmldoc.readystate==4)alert("xml file loaded");
}
var xmldoc=createdocument();
xmldoc.onreadystatechange=xmldoc_readystatechange;
xmldoc.load("myfile.xml");

在firefox、opera中使用onload。
注意,在firefox。opera中不支持使用readystate来判断文档的加载状态,而是在文件加载完,且dom对象可用时,执行onload事件处理程序。

举例:
 

复制代码 代码示例:
function xmldoc_load()
{
alert("xml is loaded");
}
var xmldoc=document.implementation.createdocument("","",null);
xmldoc.onload=xmldoc_load;
xmldoc.load("myfile.xml");

在与上面html同文件夹下再建一个如下xml文件:
 

复制代码 代码示例:
<?xml version="1.0" ?> 
<messages> 
    <daily>today is sunday</daily> 
    <daily>today is monday</daily> 
    <daily>today is tuesday</daily> 
    <daily>today is wednesday</daily> 
    <daily>today is thursday</daily> 
    <daily>today is friday</daily> 
    <daily>today is saturday</daily> 
</messages>