- 浏览: 72658 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
LeeYee:
zz894571429 写道我把你的oxcow-MsgBox- ...
基于jQuery的简单消息框MsgBox插件 -
zz894571429:
我把你的oxcow-MsgBox-jQuery的js,封装到我 ...
基于jQuery的简单消息框MsgBox插件 -
xiaoxiaozhu:
基于jQuery的简单消息框MsgBox插件 -
liujun58love:
不错,学习了,有机会研究研究。感谢楼主分享
【HTML5活动】HTML5 Canvas实现贪吃蛇
关于XPath的相关知识可以参看http://www.w3school.com.cn/xpath/index.asp
注意:以下代码的测试环境为FF3.6.3及IE6.0 。chrome浏览器没有测试过,应该不支持。
在进行XPath之前要对xml文档进行加载。如何加载可参看上篇文章。
var oXmlDom = XmlDom(); oXmlDom.load("exam1.xml");
针对IE,当在读取XML文档后,本身的对象提供了两个方法用于接收XPATH表达式。分别是:selectNodes及selectSingleNode,这两个方法是作为oXmlDom.documentElement的方法调用的。相对Mozilla比较简单,当然功能是没有Mozilla实现XPATH的功能强大。
oXmlDom.documentElement.selectNodes(xPath) oXmlDom.documentElement.selectSingleNode(xPath)
Mozilla实现XPATH的方式则相对比较复杂。需要创建XPathEvaluator对象,然后调用evaluate方法执行XPATH表达式。evaluate包含五个参数:XPath表达式、上下文节点、命名空间解释程序及返回的结果类型,同时在XPathResult中存放结果(通常为null)命名空间解释程序通常留空。返回结果类型有:
XPathResult.ANY_UNORDERED_NODE_TYPE——返回匹配节点的节点集合,但顺序可能与文档中不同
XPathResult.BOOLEAN_TYPE——返回布尔值
XPathResult.FIRST_OREDERED_NODE_TYPE——返回第一次匹配的节点
XPathResult.NUMBER_TYPE——返回数字值
XPathResult.ORDERED_NODE_ITERATOR_TYPE——返回顺序匹配的节点集合。常用
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE——返回顺序匹配节点集合快照,在文档外捕获节点,这样将来对文档的任何修改都不会影响这个节点列表
XPathResult.STRING_TYPE——返回字符串值
XPathResult.UNORDERED_NODE_ITERATOR_TYPE——返回非顺序匹配的节点集合。
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE——返回节点集合快照,但顺序可能与文档中不同
下面针对Mozilla实现selectNodes及selectSingleNode方法。由于oXmlDom.documentElement为Elment对象,那么为了用相同的代码兼容IE及Mozilla,可以将selectNodes及selectSingleNode作为Element的属性。代码如下:
/** * 查找匹配XPath表达式的节点(Mozilla实现selectNodes方法;IE自带该方法) * * @param sXPath * XPAHT表达式 * @return 节点集合数组 Array<Element> */ Element.prototype.selectNodes = function(sXPath) { var oEvaluator = new XPathEvaluator(); var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var aNodes = new Array(); if (oResult != null) { var oElement = oResult.iterateNext(); while (oElement) { aNodes.push(oElement); oElement = oResult.iterateNext(); } } return aNodes; }; /** * 查找第一个匹配XPath表达式的节点(Mozilla实现selectSingleNode方法;IE自带该方法) * * @param sXPath * XPAHT表达式 * @return 节点元素对象 instanceof Element is true */ Element.prototype.selectSingleNode = function(sXPath) { var oEvaluator = new XPathEvaluator(); var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (oResult != null) { return oResult.singleNodeValue; } else { return null; } };
这样我们就完成了Mozilla对XPath的实现。
当然Mozilla本身实现的XPath的操作要比单纯的IE提供的selectNodes及selectSingleNode方法更强大,而且对与XPath表达式的支持也更好。我们可以再扩充一些方法,但注意了,下面这些方法只能在支持Mozilla的浏览器中使用:
/** * 统计匹配指定模式的节点个数(该方法仅限于Mozilla) * * @param sXPath * XPAHT表达式 * @return 返回匹配节点个数。如没有匹配则返回0 */ Element.prototype.count = function(sXPath) { var __count = 0; sXPath = "count(" + sXPath + ")"; var oEvaluator = new XPathEvaluator(); var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.NUMBER_TYPE, null); if (oResult) { __count = oResult.numberValue; } return __count; }; /** * 判断指定XPath表达式是否有匹配节点(该方法仅限于Mozilla) * * @param sXPath * XPAHT表达式 * @return true|false */ Element.prototype.isMatch = function(sXPath) { var oEvaluator = new XPathEvaluator(); var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.BOOLEAN_TYPE, null); return oResult.booleanValue; };
当然上述方法,如果是在IE中,可以同过IE提供最基本的两个方法解决,这里就不多做赘述。
下面我们最完成的代码做下测试,看下上述编码对与XPath语法的支持情况,为此做如下测试页面
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> #hea { border: 1px dotted orange; } #xml { float: left; width: 400px; height: 600px; border: 1px dotted red; } #res { float: left; border: 1px solid green; width: 500px; height: 600px; } </style> <script type="text/javascript" src="loadxml.js"></script> <title>Insert title here</title> <script type="text/javascript"> function search(xPath) { var oXmlDom = XmlDom(); oXmlDom.onreadystatechange = function() { //IE|FF if (oXmlDom.readyState == 4 || oXmlDom.readyState == "complete") { } } oXmlDom.load("exam1.xml"); var aNodes = oXmlDom.documentElement.selectNodes(xPath); var sRes = ""; for ( var index = 0; index < aNodes.length; index++) { sRes += aNodes[index].xml + "\r\n"; } var oDiv = document.getElementById('res'); oDiv.innerHTML = ""; var xml = document.createTextNode(sRes); oDiv.appendChild(xml); } </script> </head> <body> <div id="hea"> XPath表达式:<input type="text" name="sql" id="sql" size="60" /> <input type="button" value="search" onclick="search(document.getElementById('sql').value);" /></div> <iframe src="exam1.xml" id="xml"></iframe> <div id="res"></div> </body> </html>
exam1.xml源文件如下:
<?xml version="1.0" encoding="UTF-8"?> <exam> <no id="1"> <question1>我喜欢与历史学家交往<q>ceshi</q></question1> <question2>我做事进度较慢,但确保成效</question2> <value>4</value> </no> <no id="2"> <question1>我想要每个人都喜欢我</question1> <question2>我一贯努力工作</question2> <value>7</value> </no> <no id="3"> <question1>我力争第一</question1> <question2>我思考自身的长处</question2> </no> <no id="4"> <question1>我思考有待改进之处</question1> <question2>我是一个偏重情感的人</question2> </no> <no id="5"> <question1>我能够接受多种类型的人</question1> <question2>我想念我的朋友</question2> </no> <no id="6"> <question1>与陌生人交谈使我兴奋</question1> <question2>我认为自己很能干</question2> </no> <no id="7"> <question1>我通过与新人建立联系获得满足感</question1> <question2>竞争与挑战让我感到兴奋</question2> </no> <no id="8"> <question1>成为他人的知己使我满足</question1> <question2>我信守自己的价值观</question2> </no> </exam>
我们可以在输入框中进行测试。使用XPath语法 进行测试,当然大部分语法都可以在FF中测试通过,但在IE中,显然对Xpath轴 是不支持的,同时对XPath谓语表达式中的last()、position()也是不支持的。
以下是一些测试语法,大家可以试下:
//no 或者 /exam/no 选取所有no节点
//no[@id='1'] 选取no节点属性为1的节点
//no/* 选取no的所有子节点
//no[@*] 选取所有带有属性的no节点
//no[value>4] 选取no节点下value节点值大于4的no节点
//no/question1/q | //no[@id='2'] 选取no下question1中的q节点或着no节点属性为1的节点
//no/question1/text() 取no节点下所有的question1节点所包含的文本
//IE不支持XPath轴表达式
//ff
//no[last()-1] 选取倒数第一个no节点
//no[position()<3] 选择位置小于3的no节点
child::no 选取当前文档所有的no节点
//no/child::question1 选取no节点下所有的question1节点
//no/child::question1/child::text() 取no节点下所有的question1节点所包含的文本
- XPath.zip (3.6 KB)
- 下载次数: 77
发表评论
-
【译】jQuery插件编写
2012-12-02 20:19 1291最新内容请查看:http://leeyee.github.i ... -
jQuery eTable Plugin
2012-10-15 13:56 1083最新内容请查看:http://leeyee.github. ... -
ECMAScript中原始类型Null和Undefined小结
2012-07-16 15:40 1067请移步访问:http://leeyee.github.io/ ... -
基于jQuery的简单消息框MsgBox插件
2012-06-10 10:10 10906最新内容请查看:http://leeyee.github.i ... -
【HTML5活动】HTML5 Canvas实现贪吃蛇
2011-11-26 16:10 2565活动地址:http://html5.group.iteye.c ... -
js表格字段排序
2008-09-20 23:33 8351.比较函数生成器: /** * 比较函数生成器 ... -
js实现身份证号码验证
2009-05-08 22:09 798文章最新地址请访问:http://leeyee.github ... -
js检测浏览器版本
2009-08-24 21:47 823最新地址请查看:http://leeyee.github.i ... -
实现调用window.close()关闭窗口时IE不提示
2009-08-24 22:13 1149请查看最新地址:http://leeyee.github.i ... -
javascript 贪吃蛇(一)
2010-03-31 11:00 765snake怎么玩,这里就不做介绍,大家都应该知道。写这篇东西 ... -
javascript 贪吃蛇(二)
2010-03-31 11:56 739在javascript 贪吃蛇(一 ... -
javascript 贪吃蛇(三)【附带源码】
2010-03-31 19:24 922在javascript 贪吃蛇(一 ... -
javascript 最佳实践
2010-04-07 15:58 791首次尝试翻译,如有理解错误还请指正。原文出自http://ww ... -
javascript俄罗斯方块【附带源码】
2010-04-19 14:55 795在看了W3C的关于ECMScript的对象及继承后,先是完成贪 ... -
javascript省市地区联动【素材】
2010-09-12 11:54 940资源源码下载地址:http://download.csdn.n ... -
一些关于javascript、jQuery使用时的建议
2011-04-09 11:53 807最新内容请查看:http:/ ... -
javascript XPath 实现【补充】
2010-06-07 14:23 1759在昨天参照《JavaScript高级程序设计》第15章后,针对 ... -
javascript xml 文档处理
2010-06-06 14:03 1110前几天了解了下javascript ...
相关推荐
在没有服务器端支持或者 API 接口的情况下,JavaScript 结合 XPath 可以实现简单的 web 数据爬虫。 学习 JavaScript 和 XPath,你需要掌握以下知识点: 1. JavaScript 基础:变量、数据类型、控制流(条件语句、...
xpath2.js-XPath 2查询语言的纯JavaScript实现关于xpath2.js是JavaScript中与DOM无关的开源实现。 执行引擎使用规范规定的XML Schema 1.1数据类型进行操作。特征全面的语言支持通过自定义DOMAdapter使用XPath 2.0...
------------------------------------XPath.js - Pure JavaScript implementation of XPath 2.0 parser and evaluator------------------------------------Copyright (c) 2012 Sergey IlinskyDual licensed under ...
wicked-good-xpath, 纯JS实现DOM级别 3 XPath规范 很好的XPath Wicked XPath是谷歌编写的DOM级别 3 XPath规范的纯JavaScript实现。 它为每个浏览器中的HTML文档启用... 我们相信它是JavaScript中最快的XPath实现。命
在这个场景中,“Xpath读取xml文件,实现文件缓存”指的是利用XPath来高效地检索XML数据,并通过缓存机制提高后续访问的效率。这通常涉及到以下几个关键知识点: 1. **XPath语言**: XPath是一种在XML文档中查找信息...
他们所实现的核心接口就是XPathEvaluator,它包含一些能够使用xpath表达式进行工作的方法,最主要的方法就是evaluate(),它能够接受五个参数1.xpath查询字符串2.指明xpath查询字符串应该从哪个节点开始3.命名空间...
在实际应用中,这些XPath表达式可以帮助开发者高效地定位和操作DOM中的特定节点,从而实现各种动态效果和数据提取。需要注意的是,不同的浏览器可能对XPath的支持程度不同,因此在JavaScript中使用XPath时,可能需要...
// 检查XPath实现 if (document.implementation.hasFeature("XPath", "3.0")) { // 扩展XMLDocument原型以添加selectSingleNode方法 XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode) { ...
1. 源代码:可能包括XPath Helper的实现,可能是用JavaScript或者其他编程语言编写的,用于解析和执行XPath表达式。 2. 文档:可能有用户手册、API参考、开发者指南等,帮助用户理解和使用XPath Helper。 3. 测试...
`lxml`提供了强大的XPath支持,可以方便地提取数据,而`BeautifulSoup`虽然不直接支持XPath,但可以通过结合`lxml`实现XPath查询。使用XPath可以使数据提取过程更加简洁和高效,尤其在处理复杂结构的XML或HTML文档时...
在Web开发和自动化测试中,XPath经常被用来定位HTML或XML页面上的元素,从而实现网页交互或数据提取。 "谷歌xpath插件"是一个专门为谷歌浏览器(Google Chrome)设计的扩展程序,它为开发者和测试工程师提供了一个...
本文将重点介绍Chrome控制台中的一个实用技巧——利用`$x`命令来定位和操作XPath、JavaScript以及CSS。 XPath是一种在XML文档中查找信息的语言,它可以帮助我们精确地选取HTML或XML文档中的元素。`$x`是Chrome...
JavaScript文件(content.js、bar.js、background.js)将包含实现XPath功能的代码,例如使用XPath选取XML或HTML文档中的特定部分,然后进行操作或展示。manifest.json是Chrome扩展的配置文件,定义了扩展的元数据、...
二、XPath实现原理 XPath的实现原理可以分为两部分:标签层级和兄弟元素中的顺序。标签层级是指从目标节点到body节点之间的所有父节点的层级关系,而兄弟元素中的顺序是指在同一个父节点下的兄弟节点的顺序关系。 ...
压缩包内的文件"pachong_test - X"可能是爬虫运行的代码或结果文件,通过查看这个文件,我们可以更深入地了解该示例是如何实现Xpath的运用以及具体抓取了哪些网页内容。 总结,这个爬虫demo是学习和实践Xpath技术...
在JavaScript中,XPath主要应用于AJAX开发,即在客户端与服务器交互时解析返回的XML数据。例如,服务器端返回一个简单的XML响应,如 `<resume><name>朱元璋</name><age>18</age></resume>`,客户端可以通过...
XPath 提供了多种选择器,如属性、文本内容、索引和命名空间等,以实现精确的元素定位。 Appium 利用 WebDriver 协议,允许测试脚本通过 XPath 来寻找和操作移动应用的 UI 元素。为了更有效地使用 XPath,你需要...
3. content.js、bar.js 和 background.js:这些是JavaScript文件,分别用于实现扩展程序的前端逻辑(如用户界面交互)、扩展栏功能以及后台功能(如监听和处理事件)。 4. manifest.json:这是Chrome扩展程序的配置...