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 相关文章推荐
JavaScript this 深入理解
Jul 30 Javascript
javascript 异步页面查询实现代码(asp.net)
May 26 Javascript
div模拟滚动条效果示例代码
Oct 16 Javascript
javascript模拟实现C# String.format函数功能代码
Nov 25 Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
javascript实现全角转半角的方法
Jan 23 Javascript
vue.js入门教程之计算属性
Sep 01 Javascript
原生js实现无缝轮播图效果
Jan 11 Javascript
使用Vue开发一个实时性时间转换指令
Jan 17 Javascript
JavaScript函数节流和函数去抖知识点学习
Jul 31 Javascript
vue父子组件通信的高级用法示例
Aug 29 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
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
js使用递归解析xml
2014/12/12 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
基于Python实现一个简单的银行转账操作
2016/03/06 Python
python字符串查找函数的用法详解
2019/07/08 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
教育专业个人求职信
2013/12/02 职场文书
企业管理培训感言
2014/01/27 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
现场活动策划方案
2014/08/22 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书