JS如何跨浏览器进行解析XML应用

  

JS如何跨浏览器进行解析XML应用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

首先介绍简单的理论:

对于XML,我们可以理解它是一种树结构,它包含根,元素,属性,文本等内容。不同浏览器都有自己的解析器,把XML读入内存,并把它转换为可被JavaScript访问的XML DOM对象。

微软的XML解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对XML文件和XML字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历XML树,访问,插入及删除节点的函数。

如果你使用的是一个本地文件或者网络文件且该文件在是在本服务器,那么对于IE和其他浏览器来说都可以通过负荷(uRl), loadXML(于strXML)来创建Xdom对象。但是对于文本,除IE外需要一个单独的解析器来处理。

以下函数用于根据不同的浏览器来创建Xdom对象:

 loadXMLDoc函数(){
  xmlDoc var;//代码
  如果(window.ActiveXObject) {
  xmlDoc=new ActiveXObject (“Microsoft.XMLDOM");//创建空的微软XML文档对象//xmlDoc.load (uRl);//loadXML()方法用于加载字符串(文本),而负载()用于加载文件
  xmlDoc.loadXML (xmlstr);
  }//代码Mozilla, Firefox、Opera等。
  else if (document.implementation&, document.implementation.createDocument) {
  xmlDoc=document.implementation.createDocument (““,““, null);//xmlDoc.load (uRl);//Internet Explorer使用loadXML()方法来解析XML字符串,而其他浏览器使用DOMParser对象
  解析器=new DOMParser ();
  xmlDoc=parser.parseFromString (txt,“文本/xml");
  其他}{
  警报(& # 39;您的浏览器无法处理这个脚本# 39;);
  }//关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
  xmlDoc.async=false;
  不知道(xmlDoc);
  }

方法内有具体的解析,我不再啰嗦,对于解析的内容,分为字符串和文本两种。

首先定义一个字符串:

var xmlstr=? lt;及# 63;xml version=\“1.0 \“;utf - 8编码=\“\”,# 63;祝辞& lt; goodss> & lt;商品id=\“1 \“祝辞& lt; name>数码相机& lt;/name> & lt; price> 3206(元)& lt;/price> & lt;/goods> & lt;商品id=\“2 \“祝辞& lt; name>联想笔记本电脑& lt;/name> & lt; price> 3206(元)& lt;/price> & lt;/goods> & lt;/goodss>“;

然后定义一个商品。xml文件:

文件内容为:

& lt;及# 63;xml version=?.0”;编码=癠TF-8", # 63;比;   & lt; goodss>   & lt;商品id=?“比;   & lt; name>数码相机& lt;/name>   & lt; price> 3206(元)& lt;/price>   & lt;/goods>   & lt;商品id=?“比;   & lt; name>联想笔记本电脑& lt;/name>   & lt; price> 3206(元)& lt;/price>   & lt;/goods>   & lt;/goodss>

通过取消和注释方式来选择是文本还是字符串。

这个方法可以是通用的,下面再来解析这个Xdom对象:

函数不知道(){
  var商品=xmldoc.getElementsByTagName (“goods");
  我(var=0; i< goodss.length;我+ +){
  var g=商品[我];
  如果(g.nodeType==1) {
  var name=g.getElementsByTagName (“name") [0] childnodes [0] .nodeValue;
  var价格=g.getElementsByTagName (“price") [0] childnodes [0] .nodeValue;
  var id=g.getAttribute (“id");
  文档。“写(id +“-”;“+名称+“-”;+价格);
  document . write (“& lt br/在“);
  }
  }
  }

对于使用到的函数和属性我们来解析一下:

/*   一些典型的DOM属性   x。节点名- x的名称   x。nodeValue - x的值   x。parentNode - x的父节点   x。子节点的时候存在缺陷- x的子节点   x。属性- x的属性节点   x。接着- x的第一个子节点,等同于子节点的时候存在缺陷[0]   x。lastChild - x的最后一个子节点   x。数据- x的内容,等同nodeValue   x。长度- x的长度   x。nodeType - x的类型:1、元素,2,属性,3,文本,4,注释,5,文档   在上面的列表中,x是一个节点对象   XML DOM方法   x.getElementsByTagName(名字)——获取带有指定标签名称的所有元素,返回的是数组   x.getAttribute(名字)——返回属性的值   *//*出于安全方面的原因,现代的浏览器不允许跨域的访问。   这意味着,网页以及它试图加载的XML文件,都必须位于相同的服务器上。   否则xmlDoc.load()将产生错误“denied"访问。   */

早页面增加一个按钮来调用函数:

JS如何跨浏览器进行解析XML应用