Xpath[转]

Xpath[转]

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。

因此,对 XPath 的理解是很多高级 XML 应用的基础。

XPath 语法

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

实例

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

实例

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

选取未知节点

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

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
//book/title | //book/price选取 book 元素的所有 title 和 price 元素。
//title | //price选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

XPath Axes(坐标轴)

XPath 轴

轴可定义相对于当前节点的节点集。

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

位置路径表达式

位置路径可以是绝对的,也可以是相对的。

绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

绝对位置路径:

/step/step/...

相对位置路径:

step/step/...

每个步均根据当前节点集之中的节点来进行计算。

步(step)包括:

轴(axis)
定义所选节点与当前节点之间的树关系
节点测试(node-test)
识别某个轴内部的节点
零个或者更多谓语(predicate)
更深入地提炼所选的节点集

步的语法:

轴名称::节点测试[谓语]

实例

例子结果
child::book选取所有属于当前节点的子元素的 book 节点。
attribute::lang选取当前节点的 lang 属性。
child::*选取当前节点的所有子元素。
attribute::*选取当前节点的所有属性。
child::text()选取当前节点的所有文本子节点。
child::node()选取当前节点的所有子节点。
descendant::book选取当前节点的所有 book 后代。
ancestor::book选择当前节点的所有 book 先辈。
ancestor-or-self::book选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
child::*/child::price选取当前节点的所有 price 孙节点。
posted on 2012-12-14 17:48 夜隼 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/yesun/archive/2012/12/14/2818450.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】深入分析 ASP.NET Mvc 1.0 – 1. 深入MvcHandler

MvcHandler是一个mvc程序真正开始的地方&#xff0c;因为你可以直接看到并调试它的源码。 MvcHandler的主要代码如下:protected internal virtual void ProcessRequest(HttpContextBase httpContext) {AddVersionHeader(httpContext);// Get the controller typestring control…

C++11 右值引用与常量左值引用保存临时变量(函数返回值)的底层分析

右值引用保存临时变量&#xff08;函数返回值&#xff09;的问题 &#xff1a;临时变量是右值 1、普通变量接收函数返回值&#xff1a; 2、右值引用变量接收函数返回值&#xff1a; 3、用const int& 和右值引用是一样的效果&#xff0c;只是const int& 就不可以修改…

JavaScript中的位置协议属性

JavaScript | 位置协议属性 (JavaScript | Location protocol property) A protocol by definition simply implies a set or working rules that must be adhered to. A network protocol thus defines rules for communication between network devices. You must be familia…

axure源文件_Axure教程:实现网易云音乐有声播放效果

为了方便讲解&#xff0c;我们首先在桌面新建一个文件夹&#xff0c;命名为音乐。1、将自己想要演示播放的MP3音乐文件放在这个文件夹里面。2、给播放页添加一个中继器&#xff0c;随便命名&#xff0c;我给它命名为【音乐地址链接器】&#xff0c;用来链接播放本地音乐文件。并…

2012年终总结

工作&#xff1a; 原来的文章也写过&#xff0c;今年年初的时候&#xff0c;因为一些原因&#xff0c;成了另外一家公司的员工&#xff0c;但办公地点还是在原来的公司。 这是一家外包公司&#xff0c;技术实力当然是比较强的&#xff0c;不过自己对于编程方面的兴趣止不住的一…

PYTHON解析PE的模块

RT&#xff0c;从GOOGLE CODE上找的。。虽然拿PYTHON解析PE的意义不大还有点麻烦…… 示例代码&#xff1a; #coding:gbk import sys import pefile #from struct import * import structdef main():pe pefile.PE("ccalc.exe")pe.print_info()if __name__ "__…

ffplay分析(从启动到读取数据线程插入到字幕、音频、视频解码前的队列操作)

《ffplay的数据结构分析》 《ffplay分析&#xff08;视频解码线程的操作&#xff09;》 《ffplay分析&#xff08;音频解码线程的操作&#xff09;》 《ffplay 分析&#xff08;音频从Frame(解码后)队列取数据到SDL输出&#xff09;》 《ffplay分析 &#xff08;视频从Frame(解…

python3和python2 优势_python3和python2的区别

1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间&#xff0c;在字符串和整形操作上可以取得很好的优化结果。Py3.1性能比Py2.5慢15%&#xff0c;还有很大的提升空间。2.编码Py3.X源码文件默认使用utf-8编码&#xff0c;这就使得以下代码…

并发进程同步

P是荷兰语Proberen&#xff08;测试&#xff09;的首字母。为阻塞原语&#xff0c;负责把当前进程由运行状态转换为阻塞状态&#xff0c;直到另外一个进程唤醒它。也就是不好的一方面。 V是荷兰语Verhogen&#xff08;增加&#xff09;的首字母。为唤醒原语&#xff0c;负责把一…

寄存器和pin_16x2 LCD的PIN图和寄存器

寄存器和pinIn these years the LCD is finding widespread use. It has replaced the LEDs or other multi-segment LEDs.This is due to the following reasons: 近年来&#xff0c; LCD正在广泛使用。 它已替换LED或其他多段LED&#xff0c;原因如下&#xff1a; The decli…

【Java IO知识】读取中文乱码问题解决

读取文件主要是要设置读取的输入流如InputStreamReader时要设置读取的解码格式,要和文件本身的编码格式相同,这样读取出来的才不会乱码。 InputStreamReader reader new InputStreamInputReader(input, "编码格式"); ANSI是"gbk" 注:必须是在读取的时候就…

ffplay分析(视频解码线程的操作)

《ffplay的数据结构分析》 《ffplay分析&#xff08;从启动到读取线程的操作&#xff09;》 《ffplay分析&#xff08;音频解码线程的操作&#xff09;》 《ffplay 分析&#xff08;音频从Frame(解码后)队列取数据到SDL输出&#xff09;》 《ffplay分析 &#xff08;视频从Fram…

【转】.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间&#xff0c;完善《.NET深入学习笔记》系列&#xff08;基本都是.Net重要的知识点&#xff0c;我都做了详细的总结&#xff0c;是什么、为什么、和怎么实现&#xff09;。想必很多人也接触过这两个概念。做过C的人对深浅拷贝的概念一…

c语言数组-1_C数组-智能问题与解答

c语言数组-1C programming Arrays (One-D Array, Two-D Array) Aptitude Questions and Answers : In this section you will find C Aptitude Questions and Answers on One Dimensional (1D) and Two Dimensional (2D) array. C编程数组(一维数组&#xff0c;二维数组)能力问…

abap 添加alv上的工具栏的按钮_Excel里的置顶功能——快速访问工具栏

100万职场人都在看后台回复礼包领199元职场干货大家好&#xff0c;我是小可~今天跟大家分享一个提高Excel操作效率的小技巧自定义你的快速访问工具栏设置后的效果▼▼▼也就是把你最经常用到的两三个功能放到快速访问工具栏可以一眼就找到这些功能不需要靠快捷键或者功能选项卡…

用递归法求1²+2²+...+n²的值

思路分析: 谈到递归,我个人会联想到数学里面的通式。因为递归调用的函数的对应法则是相同的。例如这道题:f(x)=x。这个就是函数通式,只不过把每个求得的结果进行累加求和即可。用户输入5的时候,会出现f(5)=5,之后再进行x减一操作,执行f(4)=4,最后将每个进行累加即可。…

机器学习资料推荐

机器学习资料推荐 机器学习的资料 1:斯坦福大学视频(作为入门教程&#xff0c;网易有中文字幕&#xff0c;而且讲义也有翻译版本&#xff09;20集200左右讲义 2&#xff1a;机器学习 Tom M.Mitchell(虽然出版10多年&#xff0c;但是通俗易懂的内容&#xff0c;让读者对机器学习…

ffplay源码(版本:ffmpeg-4.2.1)

ffplay源码&#xff08;版本&#xff1a;ffmpeg-4.2.1&#xff09; /** Copyright (c) 2003 Fabrice Bellard** This file is part of FFmpeg.** FFmpeg is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* Lic…

stringwriter_Java StringWriter toString()方法与示例

stringwriterStringWriter类的toString()方法 (StringWriter Class toString() method) toString() method is available in java.io package. toString()方法在java.io包中可用。 toString() method is used to represent the buffer current value in terms of string. toStr…

编写一个函数,计算下式当n=10和n=100的值。

思路分析: 首先,我个人看法:当我拿到这道题的时候,我会把它当成一道数学题对待。分子是动的,恒为一,分母是进行依次增加的。且奇数项为正,偶数项为负。因为设计运算出现的是分数,故,设计选取存储类型为double。 找出问题: ①正负号问题、②分母问题、③累计求和问题…