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 相关文章推荐
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 Javascript
angularjs实现与服务器交互分享
Jun 24 Javascript
JS使用for循环遍历Table的所有单元格内容
Aug 21 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
Jan 19 Javascript
JS获取一个未知DIV高度的方法
Aug 09 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
Jan 20 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 Javascript
js实现踩五彩块游戏
Feb 08 Javascript
javascript中可能用得到的全部的排序算法
Mar 05 Javascript
js实现登录时记住密码的方法分析
Apr 05 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
js运动应用实例解析
2015/12/28 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
详解Python中的strftime()方法的使用
2015/05/22 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
幼儿园教师国培感言
2014/02/02 职场文书
保护动物的标语
2014/06/11 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
vue动态绑定style样式
2022/04/20 Vue.js