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 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
jquery中使用ajax获取远程页面信息
Nov 13 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
May 19 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
Sep 23 Javascript
使用CamanJS在Web页面上处理图像的技巧
Aug 18 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
自定义Vue中的v-module双向绑定的实现
Apr 17 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 Javascript
解决vue中的无限循环问题
Jul 27 Javascript
JavaScript 事件代理需要注意的地方
Sep 08 Javascript
jQuery实现手风琴特效
Jan 11 jQuery
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
劣质的PHP代码简化
2010/02/08 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
php实现生成验证码实例分享
2016/04/10 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
vue实现弹幕功能
2019/10/25 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
优秀员工自荐书
2013/12/19 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
带你了解Java中的ForkJoin
2022/04/28 Java/Android