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 相关文章推荐
Convert Seconds To Hours
Jun 16 Javascript
JS原型对象通俗&quot;唱法&quot;
Dec 27 Javascript
javascript中clipboardData对象用法详解
May 13 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
Aug 24 Javascript
详解JavaScript常量定义
Jan 03 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
Jun 08 jQuery
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
js验证身份证号码记录的方法
Apr 26 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
Vue-cli3多页面配置详解
Mar 22 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源代码
2009/08/21 PHP
php 文章调用类代码
2011/08/11 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
python2.7和NLTK安装详细教程
2018/09/19 Python
python 多线程串行和并行的实例
2019/02/22 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
初三开学计划书
2014/04/27 职场文书
2014年收银工作总结
2014/11/13 职场文书
艺术节开幕词
2015/01/28 职场文书
护士先进个人总结
2015/02/13 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle