JS跨浏览器解析XML应用过程详解


Posted in Javascript onOctober 16, 2020

首先介绍简单的理论:

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

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

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

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

function loadXMLDoc() { 
  var xmlDoc; 
  // code for IE 
  if (window.ActiveXObject){ 
   xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//创建空的微软 XML 文档对象 
   //xmlDoc.load(uRl); 
   //loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件 
   xmlDoc.loadXML(xmlstr); 
  } 
  // code for Mozilla, Firefox, Opera, etc. 
  else if(document.implementation&&document.implementation.createDocument){  
   xmlDoc=document.implementation.createDocument("","",null); 
   //xmlDoc.load(uRl); 
   //Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象 
   parser=new DOMParser(); 
   xmlDoc=parser.parseFromString(txt,"text/xml"); 
  }else{ 
   alert('Your browser cannot handle this script'); 
  } 
  //关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本 
  xmlDoc.async=false;  
  createTable(xmlDoc); 
}

方法内有具体的解析,我不再??拢?杂诮馕龅哪谌荩?治?址??臀谋玖街帧?/p>

首先定义一个字符串:

var xmlstr="<?xml version=\"1.0\" encoding=\"UTF-8\"?><goodss><goods id=\"1\"><name>数码相机</name><price>3206(元)</price></goods><goods id=\"2\"><name>联想笔记本电脑</name><price>3206(元)</price></goods></goodss>";

然后定义一个goods.xml文件:

文件内容为:

<?xml version="1.0" encoding="UTF-8"?> 
<goodss> 
  <goods id="1"> 
    <name>数码相机</name> 
    <price>3206(元)</price> 
  </goods> 
  <goods id="2"> 
    <name>联想笔记本电脑</name> 
    <price>3206(元)</price> 
  </goods> 
</goodss>

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

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

function createTable(xmldoc){ 
  var goodss=xmldoc.getElementsByTagName("goods"); 
  for(var i=0;i<goodss.length;i++){ 
    var g=goodss[i]; 
    if (g.nodeType==1){ 
      var name=g.getElementsByTagName("name")[0].childNodes[0].nodeValue; 
      var price=g.getElementsByTagName("price")[0].childNodes[0].nodeValue; 
      var id=g.getAttribute("id"); 
      document.write(id + "-->" + name + "-->" + price); 
      document.write("<br />"); 
    } 
  }   
}

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

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

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

<input type="button" name="bxml" value="Read" onclick="loadXMLDoc()" />

页面将会输出XMl内节点的属性和子节点的内容。对于一般应用来说,我觉得上面内容已经足够了。我会在之后补充一些其他操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS(一) 之基础前提
Oct 07 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
JavaScript截断字符串的方法
Jul 15 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
了解VUE的render函数的使用
Jun 08 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
JS正则表达式常见用法实例详解
Jun 19 Javascript
vue+axios 前端实现的常用拦截的代码示例
Aug 23 Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
JS实现简易图片自动轮播
Oct 16 #Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 #Javascript
基于JQuery和DWR实现异步数据传递
Oct 16 #jQuery
JS绘图Flot应用图形绘制异常解决方案
Oct 16 #Javascript
swiper4实现移动端导航栏tab滑动切换
Oct 16 #Javascript
JS highcharts动态柱状图原理及实现
Oct 16 #Javascript
如何手动实现一个 JavaScript 模块执行器
Oct 16 #Javascript
You might like
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
基于mysql的论坛(6)
2006/10/09 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
htm调用JS代码
2007/03/15 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
用Python制作简单的钢琴程序的教程
2015/04/01 Python
简介Django中内置的一些中间件
2015/07/24 Python
windows下ipython的安装与使用详解
2016/10/20 Python
Python温度转换实例分析
2018/01/17 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
python程序需要编译吗
2020/06/19 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
中专毕业个人的自荐信格式
2013/09/21 职场文书
视光学专业毕业生推荐信
2013/10/28 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
地方白酒代理协议书
2014/10/25 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
保护动物的宣传语
2015/07/13 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL