Javascript—XPATH技术解析XML
来源:互联网 发布:win7公用网络无法修改 编辑:程序博客网 时间:2024/06/01 09:01
XML可扩展标记语言,作为传输和存储数据的载体,在web开发中应用很广泛。在我们需要将XML数据传递给前端时,需要用javascript解析才能使用,所以,使用javascript解析XML也是很普遍的。
通过javascript解析XML,我们可以使用DOM这个强大的工具(针对HTML文档、XML等文档的一套API),也就是通过getElementById或者getElementsByTagName这些方法解析XML。
那它们在解析XML时是否合适,我们考虑下下面的几个问题:
首先XML中每个元素节点不一定有id属性;其次XML中的两个元素节点可能有相同的id属性;这样使用getElementById就不能保证找到我们需要的唯一节点了。而getElementsByTagName一次获取的节点太多,在进行遍历获取数据,比较麻烦。
就XML而言,对比JSON,XML文件庞大,格式复杂,在通过DOM解析显然需要花费更过的资源和时间,用户体验肯定不好。
有没有更好点的方法呢?
XPATH技术—解决问题的良药
XPATH是什么?全称是XML Path Language(XML路径语言),适用于确定XML文档中某节点位置的语言。
我们可以把它当作类似于SQL一样的查询语言,通过给出XPATH路径信息(就像SQL命令一样)就可以从XML中查找出符合条件的节点(就像从数据库中返回需要的数据一样)。
Java中的DOM4j开源包中有selectSingleNode和selectNodes这样两个方法可以根据XPATH表达式来获取一个或多个节点。
在IE6.0及以后版本中我们可以使用同样的方式来访问任意深度的XML数据,这给XML数据的解析操作带来了便利。
但是在firefox等浏览器中,则是使用了w3c标准的XPATH处理方式,没有IE这么简单的方式,firefox中需要建立相应的操作对象和计算方法,才能返回对应的节点。
解决各种浏览器加载xml的问题
var xmlDoc; var loadXML = function (xmlFile) { if (window.ActiveXObject) { xmlDoc = new ActiveXObject("Microsoft.XMLDOM");//IE浏览器 xmlDoc.async = false; xmlDoc.load(xmlFile); } else if (isFirefox=navigator.userAgent.indexOf("Firefox")>0) { //火狐浏览器 //else if (document.implementation && document.implementation.createDocument) {//这里主要是对谷歌浏览器进行处理 xmlDoc = document.implementation.createDocument('', '', null); xmlDoc.load(xmlFile); } else{ //谷歌浏览器 var xmlhttp = new window.XMLHttpRequest(); xmlhttp.open("GET",xmlFile,false); xmlhttp.send(null); xmlDoc = xmlhttp.responseXML.documentElement; } return xmlDoc; }
封装方法,创建在不同浏览器中都可进行XPATH操作的封装方法
注:
evaluate()方法返回的是一个节点列表,得到节点列表后iterateNext()方法来遍历这个列表中的所有节点。而ORDERED_NODE_ITERATOR_TYPE就是节点的列表,按照文档中节点的属性排列。
实例—通过XPATH表达式获取XML数据
XML
通过调用selectNodes()函数来获取不同参数的值
下面通过六个需求来进行说明
XPath是对专门对XML操作的语言,通过XPath语言,可以很方便的找到你想要的那个节点,代码方便,而且效率。
- Javascript—XPATH技术解析XML
- Javascript—XPATH技术解析XML
- XML文件解析--xpath技术<一>
- Dom4j和XPath的XML解析技术
- xpath技术解析xml以及案例模拟用户登录效果
- DOM4J+XPath 解析XML
- 使用XPATH解析xml
- android XPath 解析xml
- oracle xpath 解析xml
- xpath解析xml
- xpath、dtd解析xml
- XPATH解析XML
- XPath 文档 解析XMl
- XPath快速解析XML
- XPath解析xml
- Java XPath解析XML
- XML解析 + XPath
- XML解析、生成、Xpath
- 从TCP协议的原理来谈谈rst复位攻击
- 【SPOJ-ACODE】Alphacode【计数DP】
- ANDROID安卓activity与fragment,activity之间互相传值(二)
- HTTP method POST is not supported by this URL
- javascript 中的arguments.callee
- Javascript—XPATH技术解析XML
- 校园网&openwrt记(二)应用的大体设计
- 无线传感器网络覆盖盲区的发现与修复方法研究
- 将EXCEL自定义时间格式转换为时间格式
- threadlocal
- Bitmap对象在内存中的大小和转化为字节流的大小
- 多线程互斥
- [JAVA · 初级]:1.环境变量的配置
- LeetCode:Add Two Numbers