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学习笔记之二 初识Extjs之Form
Jan 07 Javascript
TypeScript具有的几个不同特质
Apr 07 Javascript
js实现基于正则表达式的轻量提示插件
Aug 29 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
微信小程序实现之手势锁功能实例代码
Jul 19 Javascript
React Hooks的深入理解与使用
Nov 12 Javascript
vue 详情跳转至列表页实现列表页缓存
Mar 27 Javascript
JS eval代码快速解密实例解析
Apr 23 Javascript
Vue3为什么这么快
Sep 23 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中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
php操作xml
2013/10/27 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python中property属性实例解析
2018/02/10 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
python能否java成为主流语言吗
2020/06/22 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
四川成都导游欢迎词
2014/01/18 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
Win11 BitLocker 驱动器加密
2022/04/19 数码科技