XPath路径表达式笔记(转载)
简单说,xpath就是选择XML文件中节点的方法。
所谓节点(node),就是XML文件的最小构成单位,一共分成7种。
- element(元素节点)
- attribute(属性节点)
- text (文本节点)
- namespace (名称空间节点)
- processing-instruction (处理命令节点)
- comment (注释节点)
- root (根节点)
xpath可以用来选择这7种节点。不过,下面的笔记只涉及最常用的第一种element(元素节点),因此可以将下文中的节点和元素视为同义词。
一、xpath表达式的基本格式
xpath通过"路径表达式"(Path Expression)来选择节点。在形式上,"路径表达式"与传统的文件系统非常类似。
# 斜杠(/)作为路径内部的分割符。
# 同一个节点有绝对路径和相对路径两种写法。
# 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
# 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。
# "."表示当前节点。
# ".."表示当前节点的父节点
二、选择节点的基本规则
- nodename(节点名称):表示选择该节点的所有子节点
- "/":表示选择根节点
- "//":表示选择任意位置的某个节点
- "@": 表示选择某个属性
三、选择节点的实例
先看一个XML实例文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
[例1]
bookstore :选取 bookstore 元素的所有子节点。
[例2]
/bookstore :选取根节点bookstore,这是绝对路径写法。
[例3]
bookstore/book :选取所有属于 bookstore 的子元素的 book元素,这是相对路径写法。
[例4]
//book :选择所有 book 子元素,而不管它们在文档中的位置。
[例5]
bookstore//book :选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。
[例6]
//@lang :选取所有名为 lang 的属性。
四、xpath的谓语条件(Predicate)
所谓"谓语条件",就是对路径表达式的附加条件。
所有的条件,都写在方括号"[]"中,表示对节点进行进一步的筛选。
[例7]
/bookstore/book[1] :表示选择bookstore的第一个book子元素。
[例8]
/bookstore/book[last()] :表示选择bookstore的最后一个book子元素。
[例9]
/bookstore/book[last()-1] :表示选择bookstore的倒数第二个book子元素。
[例10]
/bookstore/book[position()<3] :表示选择bookstore的前两个book子元素。
[例11]
//title[@lang] :表示选择所有具有lang属性的title节点。
[例12]
//title[@lang='eng'] :表示选择所有lang属性的值等于"eng"的title节点。
[例13]
/bookstore/book[price] :表示选择bookstore的book子元素,且被选中的book元素必须带有price子元素。
[例14]
/bookstore/book[price>35.00] :表示选择bookstore的book子元素,且被选中的book元素的price子元素值必须大于35。
[例15]
/bookstore/book[price>35.00]/title :表示在例14结果集中,选择title子元素。
[例16]
/bookstore/book/price[.>35.00] :表示选择值大于35的"/bookstore/book"的price子元素。
五、通配符
# "*"表示匹配任何元素节点。
# "@*"表示匹配任何属性值。
# node()表示匹配任何类型的节点。
[例17]
//* :选择文档中的所有元素节点。
[例18]
/*/* :表示选择所有第二层的元素节点。
[例19]
/bookstore/* :表示选择bookstore的所有元素子节点。
[例20]
//title[@*] :表示选择所有带有属性的title元素。
六、选择多个路径
用"|"选择多个并列的路径。
[例21]
//book/title | //book/price :表示同时选择book元素的title子元素和price子元素。
------------------------------------------------------------------------------------------------------------------------------------------------
注:本文转载于阮一峰的网络日志(http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html),感谢原文作者!
XPath路径表达式笔记(转载)的更多相关文章
- 『心善渊』Selenium3.0基础 — 5、XPath路径表达式详细介绍
目录 1.XPath介绍 2.什么是XML 3.XML与HTML对比 4.为什么使用XPath定位页面中的元素 5.XPath中节点之间的关系 (1)节点的概念 (2)节点之间的关系类型 6.XPat ...
- Xpath学习笔记
最近复习自己上一年的课本,想起来刚学那个时候想做一个写日记的软件. 想不如做,用控制台瞎写了一个,一做就成了,没什么bug,期间使用Xpath来读数据,所以就稍微学了一下. 学习过程就这样做一点笔记, ...
- xpath路径表达式
简单说,xpath就是选择XML文件中节点的方法. 所谓节点(node),就是XML文件的最小构成单位,一共分成7种. - element(元素节点)- attribute(属性节点)- text ( ...
- jQuery官方基础教程笔记(转载)
本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...
- 转:XPath路径表达式
XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 XML 文档. & ...
- xpath语法笔记
xpath是在xml文档中查找信息的语言, 其语法整理如下: 路径表达式(选取节点) div div下的所有子节点 /div 根节点下的div //div 匹配所有的div . 当前节点 .. 父节点 ...
- HtmlCleanner结合xpath用法(转载)
HtmlCleaner cleaner = new HtmlCleaner(); TagNode node = cleaner.clean(new URL("http://finance.s ...
- Python爬虫:Xpath语法笔记
一.选取节点 常用的路劲表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpat ...
- XPath注入笔记
XPath注入 XQuery注入 测试语句:'or '1'='1 利用工具: Xcat介绍 Xcat是python的命令行程序利用Xpath的注入漏洞在Web应用中检索XML文档 下载地址:https ...
随机推荐
- Ant demo
<?xml version="1.0" encoding="UTF-8"?> <!-- 定义一个工程,默认任务为warFile. --> ...
- CF1012B Chemical table 题解【二分图】【构造】
有意思的网格图转化.CF Div.1 还是挺有难度的. 注:由于本题有较完美的中文题面,所以不贴英文题面. 英文题面 题目描述 Innopolis 大学的教授正努力研究元素周期表.他们知道,有 \(n ...
- luogu P2365 任务安排(FJOI2019 batch)
洛谷传送门 FJOI 日常原题 $2333$(似乎还不如 SDOI2012 任务安排 $2333$) 显然考虑 $dp$,这个是经典的把未来的代价先计算的 $dp$,然后才是斜率优化 一开始想状态时一 ...
- 项目构建工具maven的使用方法
最近在开发javaweb项目中有用到maven,以前并不是很了解,于是学习了一些相关内容,记之共享. 本篇内容在Windows环境下实施,JDK版本使用的1.7.0_79. 一.maven是什么? 简 ...
- 【Python】二进制转ASCII码小脚本
#coding:utf-8 #developed by carrypan! import binascii import optparse def main(): usage="%prog ...
- PIE SDK矢量点生成等值线、面
1.算法功能简介 等值线图能直观地展示数据的变化趋势,是众多领域展示成果的重要图建之一,被广泛应用于石油勘探.矿物开采.气象预报等众多领域.等值线的绘制是指从大量采样数据中提取出具有相同值的点的信息, ...
- APP和小程序哪个更合适企业
很多企业都在纠结做APP好呢,还是做小程序好,那么我们来说说APP和小程序之间的区别,希望通过对比让您了解APP和小程序的功能,让您的企业在制作APP和小程序之间有一个选择. 一. 面向用户群 App ...
- typescript -- ts
算是强类型语言,javascrpt是弱类型语言,是指对数据的类型的处理,弱类型语言的特点有时候只是在支行的时候才告诉你出错了,但写的时候你是查觉不到的 ts也是以es5-7为语法标准的,开发的算是另外 ...
- (转)[InnoDB系列] -- SHOW INNODB STATUS 探秘
原文:http://imysql.cn/2008_05_22_walk_through_show_innodb_status 很多人让我来阐述一下 SHOW INNODB STATUS 的输出信息, ...
- C# 反射(Reflection)技术
本文参考自C#反射(Reflection)详解,纯属学习笔记,加深记忆 在介绍反射前,先介绍一个重要的知识点 .Net应用程序是由程序集(Assembly).模块(Module).类型 ...