`
刘琛颖
  • 浏览: 50274 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

XPath

阅读更多

XPath 简介

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。 其实对些我们并不陌生,最与XPath相似的便是CSS的选择器.在CSS中使用CSS选择符选择元素来应用样式,而在XSLT中则使用XPath,XPath与CSS选择器相比如强大的许多!下面是CSS选择符与XPath选择符一些对照:

	//CSS选择符
	body p  //选择所有body下面的p元素
	body>p //选择body的子元素p
	* //选择所有的元素
	//与之对应的XPath选择符
	body//p
	body/p
	*

虽然现在还不能了解这些XPath表达的含意,但可以发现,它和CSS选择符十分相像!但XPath有更强大的地方,比如它可以定位到body元素下具体位置上的p或可以选择前N个p:

	body/p[position()=4]  //这个XPath表达式将选取body子元素中第4个p元素,注意这里从1开始计数
	body/p[position()<3]  //将选取body子元素中前两个p元素

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。另外,XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。

书写XPath

XPath使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径(path)或者 步(step) 来选取的。如"/"表示文档节点,"."表示当前节点,而".."则表示当前节点的父节点.示例:

	{因为XPath表示达式中有斜杠,所以暂时用这个表示注释!
	/ {选取文档节点,nodeType为9
	/root {选取文档根元素,类似于文件系统的路径(Unix),以/开头的路径都是绝对路径
	/root/child/.. {选取根节点root的子节点child的父节点(就是root)

下面是一些常用路径表达式

  • nodeName 选取名称为nodeName的节点
  • / 从根节点选取
  • // 选择元素后代元素,必须在后面跟上nodeName
  • . 选取当前节点
  • .. 选取当前节点的父节点
  • @ 选取属性节点(@是attribute的缩写)
	<?xml version="1.0"?>
	<root>
		<child attr="attr" />
		<child>
			<a><desc /></a>
		</child>
	</root>
	{针对上面的XML文档的XPath结果,当前节点为document
	/root  {选取root
	root {选取root
	child {空,因为child不是document的子元素
	//child {选取两个child元素,//表示后代
	//@attr {选取attr属性节点
	/root/child//desc {返回child的后代元素desc

谓语(Predicates)

谓语用于在查找节点时提供更详尽的信息,谓语被嵌在方括号中。下面是一些带有谓语的XPath表达式:

	/root/child[3] {选取root元素的第三个child子元素,注意,这和数组下标不一样,从1开始计数
	//child[@attr] {选取所有具有属性attr的child元素
	//child[@attr="val"]/desc {选取所有属性attr的值为val的child元素的子元素desc
	//child[desc] {选取所有的有desc子元素的child
	//child[position()>3]  {position()是XPath中的一个函数,表示节点的位置
	//child[@attr>12] {XPath表达式还可以进行数值比较,该表达式将选取attr属性值大于12的child元素
	//child[last()] {last()函数返回节点列表最后的位置,该表达式将选取最后一个child元素

通配符

XPath 通配符可用来选取未知的 XML 元素。

  • * ,和CSS中的选择符一样,这将匹配任何元素节点
  • @* ,匹配任何属性节点
  • node() ,匹配任何类型的节点
	/root/* {选取根元素下面的所有子元素
	/root/node() {选取根元素下面的所有节点,包括文本节点
	//* {选取文档中所有元素
	//child[@*] {选取所有具有属性的child元素
	//@*  {选取所有的属性节点

组合路径

与CSS中使用逗号组合使用多个选择符一样,XPath支持一种使用"|"来组合多个路径的语法!

	/root | /root/child {选取根元素root与它下面的子元素child
	//child | //desc {选取所有的child元素与desc元素

XPath 运算符

下面列出了可用在 XPath 表达式中的运算符:

  • | ,计算两个节点集
  • + ,加法
  • - ,减法
  • * ,乘法
  • div ,除法,因为/已经被作为路径符了,所以不能用来作为除法标识
  • mod ,取余
  • = ,等于
  • != ,不等于
  • < ,小于
  • <= ,小于或等于
  • > ,大于
  • >= ,大于或等于
  • or ,或
  • and ,与

XPath 轴

轴可定义某个相对于当前节点的节点集。下面一可用的轴名称与对应的结果:

  • ancestor 选取当前节点的所有先辈(父、祖父等)
  • ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
  • attribute 选取当前节点的所有属性
  • child 选取当前节点的所有子元素。
  • descendant 选取当前节点的所有后代元素(子、孙等)。
  • descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
  • following 选取文档中当前节点的结束标签之后的所有节点。
  • namespace 选取当前节点的所有命名空间节点
  • parent 选取当前节点的父节点。
  • preceding 选取文档中当前节点的开始标签之前的所有节点。
  • preceding-sibling 选取当前节点之前的所有同级节点。
  • self 选取当前节点。

事实上,一个完整的XPath表达式由"/"与"步"构成的,而步又是由 "轴" 、 "节点测试"和"谓语"构成的.如下:

	step/step/.....  {一个XPath表达式
	{step的构成
	轴名称::节点测试[谓语]

在一般的XPath表达式中,没有谓语即表达没有其它条件限制,而没有轴名称,则默认使用child.如"abc"与"child::abc"是等效的, 下面是一些与使用轴名称等效的简单XPath表达式:

  • child::abc --------------------- abc(子元素abc)
  • root/attribute::id ------------ root/@id(root的属性id)
  • self::node() ------------------ .(自身)
  • parent::node() --------------- ..(父节点)
  • child::* ------------------------ *(子元素)
  • child::text() ------------------ text()(子文本节点)
  • descendant::tag ------------ .//tag (后代tag元素)

XPath还包含一套函数库,如position与last就是函数,一般的函数被用在谓语中,而在XSLT及XQuery中它们则得到了更广泛的使用.

浏览器中的XPath

IE浏览器对XPath的实现比较简单.一个XML DOM对象(及每个节点)都有selectSingleNode与selectNodes方法,传入XPath表达式,selectNodes返回匹配的节点列表,而selectSingleNodes则只返回列表中第一个项目!

	var loader = new XMLoader();//我们之前写的跨浏览器的XML DOM加载函数
	var xmlDom = loader.load("text.xml");
	var root = xmlDom.selectSingleNode("/*");//返回文档根元素
	root = xmlDom.selectNodes("/*")[0];//同上
	var lastChild = xmlDom.selectSingleNode("/*/*[last()]");

Mozilla是根据DOM标准来实现对XPath的支持的。DOM Level 3附加标准DOM Level 3 XPath定义了用于在DOM中计算XPath表达式的接口。遗憾的是,这个标准要比微软直观的方式复杂得多。

虽然有好多与XPath相关的对象,最重要的两个是:XPathEvaluator和XPathResult。XPathEvaluator利用方法evaluate()计算XPath表达式。

evaluate()方法有五个参数:XPath表达式、上下文节点、命名空间解释程序和返回的结果的类型,同时,在XPathResult中存放结果(通常为null)。

命名空间解释程序,只有在XML代码用到了XML命名空间时才是必要的,所以通常留空,置为null。返回结果的类型,可以是以下十个常量值之一:

 

  • XPathResult.ANY_TYPE——返回符合XPath表达式类型的数据
  • XPathResult.ANY_UNORDERED_NODE_TYPE——返回匹配节点的节点集合,但顺序可能与文档中的节点的顺序不匹配
  • XPathResult.BOOLEAN_TYPE——返回布尔值
  • XPathResult.FIRST_ORDERED_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——返回节点集合快照,在文档外捕获节点,这样将来对文档的任何修改都不会影响这个节点列表。节点集合中的节点和文档中原来的顺序不一定一样。

下面是使用ORDERED_NODE_ITERATOR_TYPE的例子:

	var loader = new XMLoader();
	var xmlDom = loader.load("test.xml");
	var evaluator = new XPathEvaluator();
	var result =evaluator.evaluate("/root",xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
	var node;
	if (result) {//执行失败会返回null
		while(node=result.iterateNext()) {//这个列表必须使用iterateNext方法遍历
			alert(node.tagName);
		}
	}
分享到:
评论

相关推荐

    Xpath生成器,自动生成XPATH,C#版

    XPath(XML Path Language)是一种在XML文档中查找信息的语言,它是W3C组织制定的一种标准查询语言,用于选取XML文档中的节点,包括元素、属性、文本等。在本项目“Xpath生成器,自动生成XPATH,C#版”中,开发者...

    IE下获取XPATH小工具源码_xpath_

    XPath,全称XML Path Language,是一种在XML文档中查找信息的语言。它被设计用来选取XML文档中的节点,如元素、属性、文本等。在IE浏览器下,为了方便开发者获取XML或HTML文档中的XPath路径,存在一种小工具,本文将...

    xpath-helper.zip

    本压缩包文件"xpath-helper.crx"很可能是一个Chrome浏览器的扩展程序,旨在提供实时的XPath查询支持。 XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取节点,如元素、...

    Xpath生成器,自动生成可用的Xpath。

    Xpath生成器,可以通过输入的文件,进行匹配,生成全部可用的Xpath,犹豫HTML中部分标签允许无结束,如:("LINK" ,"META","SCRIPT","IMG" ,"INPUT", "FORM")故已经被忽略,如有朋友发现其中有问题,请告诉我哦...

    XPath Helper版本2.0.2

    XPath Helper是一款非常实用的工具,尤其对于Web开发者和数据抓取者来说,它极大地简化了在网页中查找和提取信息的过程。版本2.0.2是这个插件的一个更新,旨在提供更稳定、高效的功能。XPath(XML Path Language)是...

    火狐老版本+xpath插件(适合python+xpath爬虫使用)

    火狐老版本与XPath插件的组合在Python网络爬虫领域具有重要的应用价值。XPath是一种在XML文档中查找信息的语言,对于数据提取和解析尤其有效。在这个压缩包中,我们找到了火狐的老版本浏览器和一个专门针对XPath的...

    xpath的jar包

    XPath,全称XML Path Language,是一种在XML文档中查找信息的语言。它被设计用来允许对XML文档中的元素、属性和其他节点进行快速定位。XPath使用路径表达式来选取XML文档中的节点,这些路径表达式类似于我们在文件...

    谷歌浏览器XPath2.0插件

    XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取节点,比如元素、属性和文本等。XPath 2.0是XPath的第二个主要版本,增加了更多的功能和优化。 在没有XPath Helper的...

    XPathHelper_2.0.2.zip

    XPathHelper_2.0.2.zip 是一个包含XPath Helper Chrome扩展程序的压缩文件,版本为2.0.2。XPath Helper是一款非常实用的工具,它专为Chrome浏览器设计,帮助开发者和网页爬虫工程师高效地测试和调试XPath表达式。...

    xpath-helper 插件及使用方法

    XPath Helper是一款强大的Chrome浏览器插件,专为网页元素定位和数据提取而设计。它使得开发者和数据抓取者能够方便地生成和测试XPath表达式,从而高效地在HTML文档中定位所需信息。XPath(XML Path Language)是一...

    xpath 依赖包及开发手册

    XPath是XML处理中的一种强大的查询语言,用于在XML文档中查找特定的信息。它允许开发者根据节点的名称、属性、值甚至是它们之间的关系来定位XML数据。在这个“xpath 依赖包及开发手册”中,我们主要关注XPath的使用...

    XPath Helper 2.0.2网页插件

    XPath Helper 2.0.2 是一款非常实用的网页插件,主要针对的是网页数据抓取和解析领域。XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取XML文档中的节点,包括元素、...

    XPath教程(描述XPath的用法)

    XPath是一种在XML文档中查找信息的语言,用于选取XML文档中的节点,包括元素、属性、文本等。XPath基于路径表达式来选取XML文档中的节点,这些路径表达式类似于文件系统的路径,但更为灵活。 1. **XPath的基本概念*...

    查看网页元素的xpath

    XPath 使用路径表达式来选取节点,如元素、属性、文本等。本篇文章将详细探讨如何查看网页元素的 XPath,并介绍其相关知识点。 首先,XPath 的基本概念: 1. **节点**:在 XML 或 HTML 文档中,节点可以是元素(如...

    chrome_Xpath_v2.0.2.zip

    Chrome_Xpath_v2.0.2.zip 是一个用于谷歌浏览器(Chrome)的扩展程序,它主要服务于网页数据抓取和数据分析。Xpath 是 XML Path Language 的缩写,是一种在XML文档中查找信息的语言,同时也被广泛应用于HTML页面的...

    dom4j和xpath必备jar包

    在Java开发中,DOM4J和XPath是两个重要的XML处理工具。XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、配置文件和文档结构化存储。DOM4J和XPath则提供了方便的方式来解析、操作和检索XML文档...

    ff30 firebug2.0.2 xpath checker0.4.4

    FF30 Firebug 2.0.2与XPath Checker 0.4.4是针对Firefox 30浏览器的两款重要扩展。Firebug是一款强大的Web开发工具,而XPath Checker则是一款用于验证XPath表达式的实用工具。这两款扩展在开发和调试网页时提供了...

    JDOM中XPath.selectNodes()和XPath.selectSingleNode()用法

    XPath是一种强大的查询语言,用于在XML文档中定位元素、属性和其他节点。本文将深入探讨JDOM库中XPath的相关方法——`selectNodes()`和`selectSingleNode()`,以及它们的用法。 首先,我们来理解JDOM的基本概念。...

    对Xpath 获取子标签下所有文本的方法详解

    XPath,全称XML Path Language,是一种在XML文档中查找信息的语言。它被广泛应用于Web抓取,特别是Python的Scrapy框架中,用于选取XML或HTML文档中的节点。本文将深入探讨如何使用XPath来获取子标签下的所有文本内容...

    Java中使用xpath获取xml中的数据

    在Java编程环境中,XPath是一种强大的查询语言,用于在XML文档中查找信息。它允许我们根据节点的名称、属性、值或其他特性来定位XML文档中的特定部分。本篇将深入探讨如何在Java中利用XPath来提取XML文档中的数据,...

Global site tag (gtag.js) - Google Analytics