好贷网好贷款

用javascrip读XML在ie,firefox和chrome下的差异

发布时间:2016-12-3 10:21:11 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"用javascrip读XML在ie,firefox和chrome下的差异",主要涉及到用javascrip读XML在ie,firefox和chrome下的差异方面的内容,对于用javascrip读XML在ie,firefox和chrome下的差异感兴趣的同学可以参考一下。

javascript在各个浏览器下面的行为不一样的确是很让人头痛。最近做一个用到ajax的东西,有些问题困扰了我不少。所以在这里写一下希望遇到同样的问题的人能有帮助。 首先看看打开xml文档。 一.ie 1.读xml ie下面打开xml文档的办法相对比较容易。 if (window.ActiveXObject) {   xmlDoc=newActiveXObject("Msxml2.DOMDocument");   xmlDoc.async="false";   xmlDoc.load("myxml.xml"); } 这个xml文件是同一个子目录。 这里面的window.ActiveXObject是ie特有的,在firefox下面是不能 xmlGet=newActiveXObject("Msxml2.DOMDocument");这样创建一个DOMDocument的。 2.查看错误 在读结点的内容前可以判断解析是不是出错: if(xmlDoc.parseError.errorCode != 0) {   alert("XML Error: " +xmlDoc.parseError.errorCode.toString()); } 这里的错误代码都是很奇怪的数字,具体含义就不说了。 3.读结点内容 读结点的办法是Msxml2.DOMDocument提供的接口: 比如: xml文档是这样的 <myroot> <mynode>mytext</mynode> </myroot> var my_text =xmlDoc.documentElement.selectNodes("//mynode")(0).text; xmlDoc.documentElement.selectNodes("//mynode")给出来的是xml中所有叫做mynode的结点的一个list。 这里比较有趣,因为(0)这样的list的用法在firefox下是不行的 ie中可以[0]或者(0)这样,而firefox只能[0] 不过无所谓了,反正这段代码是ie专用的。 具体细节就不多说了,反正这篇是专门讲ie,firefox,chrome的差异的。 二.firefox以及opera和其他 1.读xml if (document.implementation &&document.implementation.createDocument) {   xmlDoc=document.implementation.createDocument("","", null);   xmlDoc.async =false;   xmlDoc.load("myxml.xml");  } 这里要注意的是xmlDoc.async =false;在ie中写成"false"和false好像是一样的,但是在firefox下面就必须是false。 2.查看错误 if (xmlDoc.documentElement.tagName == "parsererror") {   alert("XML Error."); } 这里我没有试着打开错误的xml文档 据说在firefox中,如果发生错误,会生成这样的文档: 比如 <myroot> <mynode>mytext</myroot> 这样的文档可能是: <parsererrorxmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml"> XML Parsing Error: mismatched tag. Expected:</mynode> Location: http://yourwebsite...... Line Number 2, Column13:<sourcetext><mynode>mytext------</myroot></sourcetext> </parsererror> 这段文字换颜色是为了避免标签配对看上去不舒服 3.读取结点 createDocument得到的是一个XMLDocument 可以用 var my_text =xmlDoc.documentElement.getElementsByTagName_r("url_name")[0].childNodes[0].nodeValue; 这里说到childNods[0] 这个是很有趣的 firefox中比如<a>b</a>这种的结构,是有一个叫做#text(或者#textNode?)的结点的。 在html的解析也会这样。我自己没有试过,比如 <div><p></p><p></p><p></p></div>在firefox中div的childNodes的length是3 而 <div> <p></p> <p></p> <p></p> </div> 在firefox中第二个div的childNodes的length是7 是这样的: <div>------这里有一个#text结点,内容是一个换行符 <p></p>------这里又有一个#text结点,内容是一个换行符 <p></p>... ie中,第二个的div的childNodes的length依然是3,这一点是不一样的。 所以XML的DOM里,<a></a>是没有这个childNodes[0]的,需要用hasChildNodes()来判断一下。 三.Chrome 1.打开XML文档 if (document.implementation &&document.implementation.createDocument) {   xmlDoc=document.implementation.createDocument("","", null);   xmlDoc.async =false;   xmlDoc.load(../myxml.xml);  } 这样在Chrome中是出错的,因为createDocument得到的是一个Document对象,是没有load函数的。 那怎么办呢? http://code.google.com/p/chromium/issues/detail?id=988#c21中提供了一个workaround: var xmlhttp = new window.XMLHttpRequest(); xmlhttp.open("GET", "myxml.xml", false); xmlhttp.send(null); xmlDoc = xmlhttp.responseXML.documentElement; 2.查看错误 好像只有查看XMLHttpRequest的错误了。 用XMLHttpRequest.statusText;吗?我也不大清楚。 3.读结点内容 这里和firefox一样可以用 var my_text =xmlDoc.getElementsByTagName_r("url_name")[0].childNodes[0].nodeValue; 这里的xmlhttp.responseXML相当于与上面的xmlDoc,这里取xmlDoc的时候已经取了documentElement,因为是直接取自我的程序我就不改了,免得测试不过写上错误的东西。 此外,在用XMLHttpRequest下载网页的行为上好像也和微软的不同,是firefox和chrome不能跨域下载东西吗?我得到的status总是0,而responseText是空的。不过后来换用php调用c++下载,然后我只需要下载本地的php就可以,就没遇到这个问题了。(因为很多大站下载不来的,用Msxml2.XMLHTTP也会有405not allowed 412 require denied 错误,所以索性换成c++去做了。) http://blog.sina.com.cn/s/blog_4a5c75d40100lsyk.html

上一篇:ORM实质-Magento CRUD操作
下一篇:vba宏,实现根据一列的值自动生成同名工作表

相关文章

相关评论