转自:http://www.matrix.org.cn/resource/article/0/804.html
在XSL中我们有时候需要取出文档中特定的一个元素集合,但是如何指定这个元素集合呢?这样就需要用到XPath标准。
XPath是在1999年11月16日和XSLT一起成为正式标准的。XPath是用作XSLT和XPointer的对XML文档各部分进行定位的语言。它给XSLT和XPointer(XML文件内部链接语言)提供一个共同、整合的定位语法,用来定位XML文件中各个部位。XPath除了提供一套定位语法之外,还包括一些函数,它们提供基本的数字运算、布尔运算和字符串处理功能。
XPath使用一个紧凑的、非XML的语法来方便实现XPath在XML属性值中的使用,它基于XML文档的逻辑结构,在该结构中进行导航。除了用于定位,XPath 自身还有一个子集能用于进行匹配,它能验证一个节点是否匹配某个模式。XPath把一个XML文档看成一个树或节点的模型。节点的类型可以有多种,包括元素节点、属性节点和文本节点。
XPath的基本语法由表达式构成。在计算表达式的值之后产生一个对象,这种对象有以下四种基本类型:节点集合、布尔型、数字型和字符串型 。
表达式的计算依据上下文的出现,XSLT和XPointer中分别规定了XPath表达式将在怎样的情况下出现。这些上下文的关系包括:节点、一对正整数(表明位置和大小)、一套变量绑定集合、函数库以及规定表达式范围的名域声明。其中,变量绑定是从标量名称到变量值的映射。变量的值是一个对象,可以是表达式可能得到的各种类型,也可以是其他没有规定的类型。在函数库中,每个函数有零个或多个参数,并返回一个结果。XPath定义了所有支持工具都必须实现的核心函数库。其中的函数的参数和结果都是上面涉及的四种基本类型。当然XSLT 和XPointer中还对XPath的核心函数库进行了扩展,有些函数的参数和返回结果数据类型超出了四种基本类型。
XPath基本上和在文件系统中寻找文件类似,如果路径是以"/"开头的,就表明该路径表示的是一个绝对路径,这和在UNIX系统中关于文件路径的定义是一致的。
当然XPath本身有一套完整的语法说明,类似巴克斯-诺尔范式。这里我们不想列出所有严格的定义表达式,而采用实际例子的方法来说明如何使用XPath语言。
1.关于"/,"//"的使用,见下面的例子:
1 /网站 表示选择根目录下的元素网站
2 /网站/中文网站表示选择根目录下元素网站下面的所有元素名称为中文网站的元素
3 /网站/中文网站/门户网站表示选择所有的名称为门户网站的元素,它的父节点为中文网站,而中文网站是根节点元素中文网站的孩子。
4 file://体育网站 表示选择所有元素名称为体育网站的元素。它可以在XML文档节点的任何位置。
2.关于"*"的使用,见下面的例子:
1 file://*表示所有的元素。
2 file://体育网站/足球网站表示选择所有元素名称为足球网站的元素,但是它的父节点必须是体育网站。
3 /网站/中文网站/门户网站/*表示选择节点/网站/中文网站/门户网站/下的所有元素。
4 /*/*/娱乐网站表示选择所有名称为娱乐网站的元素,前提是该元素的祖先有两层。如果和武林中门派弟子辈分相类比的话,就是表示所有第三代弟子。
3.关于XPath函数的使用
1 file://网站/中文网站[1]就是选择元素网站下的第一个中文网站元素。比如王重阳有七个弟子,按次序分别为王一、王二、….王七的话,这里相当于我们就选王一。
2 file://网站/中文网站[last()]就是选择元素网站下的最后一个中文网站元素。继续上面的比喻的话,这里相当于选王七。
3 file://网站[@id]表示选择带有属性id的名称为网站的元素。
4 file://网站[@name]表示选择具有属性名称为name的名称为网站的元素。
5 file://网站[@*]表示选择元素网站,它具有一些属性,但可以是任意属性。
6 file://网站[not(@*)]表示选择元素网站,该元素不具有任何属性。
7 file://网站[@id='WebSite']表示选择元素网站,该元素的属性id的值为WebSite。
8 file://体育网站[@name='www.football.com']表示选择元素体育网站,该元素有一个属性名称为name,值为'www.football.com'。
9 file://*[count(体育网站)=2]表示选择有两个子元素,并且子元素名称为体育网站的元素。
10 file://*[count(*)=n]表示选择有n个子元素的元素。
11 file://*[name()='体育网站']选择所有名称为体育网站的元素,等效于//体育网站
12 file://*[start-with(name()='网站')]选择所有元素名称开始为网站的元素
13 file://*contains(name),'网站')]选择所有名称包括网站这个单词的元素
14 file://*[string-length(name())=n]选择所有有n个字符的元素
15 file://*[string-length(name())
16 file://*][string-length(name())=n]选择所有字符个数大于n的元素
17 position()函数表示选择特定位置的元素,比如//网站[position() mod 2=0]表示所有位置在偶数行的元素。
18 file://网站|//BBS 选择所有元素名称为网站或者BBS的元素
4.关于XPath中轴的概念的使用
1 file://child::网站等效于//网站
2 descendant表示当前上下文节点下的所有子元素,这里的子元素不仅包括该节点直接的子元素,还包括它所有子元素的子元素。也就是这个节点下的所有元素。
比如:/descendant::*等效于//*,也就是表示所有的元素。
3 parent表示当前节点的父元素,例子://体育网站/parent::*表示体育网站这个元素的所有父节点的集合。
4 Ancestor表示当前节点的所有祖先节点,所以不仅包括该元素的直接父节点,还包括父节点的父节点等等。用一棵树表示节点层次关系的话,所有该节点的上层都叫做Ancestor。例子://足球网站/ancestor::*就表示所有足球网站元素的祖先节点。
5 Following-sibling表示当前节点的所有在它之后的兄弟节点:例子://体育网站/follwing-sibling::*表示所有和体育网站这个元素在一个层次上的元素集合。
6 Preceding-sibling表示当前节点的所有在它之前的兄弟节点:例子://体育网站/follwing-sibling::*表示所有在体育网站这个元素之前的一个层次上的元素集合。
7 Following表示在文档中后出现的所有节点,不包括属性节点和名字空间(namespace)节点。
8 Preceding表示在文档中前面出现的所有节点,不包括属性节点和名字空间(namespace)节点。
9 Descendant-or-self和descendant的区别在于它同时包括了上下文节点本身。ancestor-or-self和ancestor的区别在于它同时包括了上下文节点本身。注意下面的一行代码,它表示了文档中的所有节点。
file://XXX/ancestor::*| XXX/descendant::*| XXX/following::* | XXX/preceding::* | XXX/self::*
分享到:
相关推荐
本篇文章将详细探讨如何查看网页元素的 XPath,并介绍其相关知识点。 首先,XPath 的基本概念: 1. **节点**:在 XML 或 HTML 文档中,节点可以是元素(如 `<div>`)、属性(如 `class="example"`)、文本(如 ...
Chrome浏览器的控制台是开发者日常工作中不可或缺的工具,尤其对于Java和Vue等前端开发者来说,它提供了丰富的功能,包括网络请求分析、元素检查...后续的文章将会继续分享更多关于Chrome控制台的使用技巧和实战案例。
阅读该系列文章,你可以深入理解XPath在网页自动化测试中的作用和技巧,提升你的测试编写能力。同时,提供的文件`Selenium私房菜系列2 -- XPath的使用【ZZ】 - hyddd - 博客园.htm`和其附属文件,很可能是该系列文章...
本篇文章将深入探讨XPath解析的相关知识点。 首先,XPath的核心概念是路径表达式,它类似于我们在操作系统中使用的文件路径。例如,“/html/body/p”表示从根节点“html”开始,向下找到“body”子节点,再找到“p...
在本篇文章中,我们将深入探讨如何利用XPath来解析XML文件,并且会提及如何通过XPath操作Map集合,从而避免过多地生成Java Bean类。 首先,理解XML文档的结构至关重要。XML是一种标记语言,用于存储数据,其结构...
本篇文章将深入探讨如何使用Dom4j,一个流行的Java库,结合XPath来解析XML文件中的路径表达式,同时阐述相对路径和绝对路径的匹配原则。 首先,我们要了解Dom4j库。Dom4j是一个灵活且高效的处理XML的Java库,它提供...
本篇文章将详细探讨RPA Selenium定位Xpath工具的使用,以及相关的Fire-IEBrowser1.4和xpath-helper。 首先,RPA(Robotic Process Automation)是一种技术,它允许用户通过模拟人类在应用界面的操作来自动化业务...
1、数据采集与预处理是数据分析的关键步骤,其中爬取特定网站的信息是常见的需求。2、XPath是一种在XML文档中查找信息的语言,可用来在XML...(可结合博客文章《数据采集与预处理之xpath爬取豆瓣电影新片榜信息》使用)
从内容上来看,这篇文章详细介绍了XPath和SQL在查询XML数据时的算法实现,为数据库管理和XML数据查询提供了理论和技术支持。通过将XPath查询转换为SQL语句,数据库系统能更加有效地处理XML数据,提升了查询效率和...
本篇文章将深入探讨Dem4j库如何结合XPath来解析XML文档,以及XPath中的相对路径和绝对路径的匹配原则。 首先,让我们了解Dem4j。Dom4j是一个Java库,提供了强大的XML处理功能,包括读取、写入、修改和遍历XML文档。...
文章目录Xpath 的使用lxml 库Xpath 简介Xpath 语法实例应用Xpath 节点所有节点子节点父节点属性单值匹配多值匹配多属性匹配获取属性文本获取Xpath 轴小结 Xpath 的使用 正则表达式 笔记整理 Python requests 模块 ...
在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 ... 您可能感兴趣的文章:用xpath获取指定标签下的所有text的实例python的xpath获取div标签内html内容,实现innerh
W3C关于XPath的详细文档可以在官方链接中找到。XPath 2.0作为XPath 1.0的超集,支持更丰富的数据类型,同时向后兼容XPath 1.0。 XPath表达式 XPath表达式可以返回节点、节点集、原子值或这些值的组合。XPath的路径...
描述中提到的 "博文链接:https://fhqiwcw.iteye.com/blog/1462239" 提示我们,可能存在一篇详细介绍如何使用 nekohtml 和 XPath 的博客文章,但由于描述为空,我们无法直接获取该文章的具体内容。不过,我们可以...
本篇文章主要介绍在PHP中使用Xpath来解析XML的方法,并通过实例详细分析Xpath语法以及使用Xpath解析XML文档的操作步骤和相关实现技巧。 首先,我们来了解什么是Xpath。Xpath是一种语言,用于在XML文档中进行导航,...
内容概要:学习使用爬虫技术从网络爬取小说 技术:Python,requests,xpath,lxml 能学到什么:Python爬虫基础,requests基础,xpath数据提取...文章链接:https://blog.csdn.net/iwantrain/article/details/130551354
在本篇文章中,我们将深入探讨这两种技术,并通过示例来理解它们的基本概念和用法。 首先,XPath(XML Path Language)是一种用于在 XML 文档中查找信息的语言。它提供了一种简洁的表达式语法来选取 XML 文档中的...
在本篇文章中,我们将深入理解如何使用XPath与PHP结合来解析HTML。 实例1: 在第一个实例中,我们首先使用`simplexml_load_file`函数加载一个网页(这里是"https://forums.eveonline.com")到一个SimpleXMLElement...
xpath_helper 谷歌浏览器插件超级好用,免费的哦,如果对您有帮助希望关注我的博客,后续会发布更好的文章 博客地址:https://tianlingqun.blog.csdn.net/ 环境加入大数据技术社区:...