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 ...
随机推荐
- 解决myeclipse打开.form文件报错
症状: 打开AutoEKPMainFrm.form文件的时候出现如下问题:
- SQL语句之用户管理
SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 占坑,待写……
- 进阶篇:4.2)DFA设计指南:优化装配工序
本章目的:针对每一个装配工序,运用DFA进行优化. 1.前言 工序的优化在产品的精简之后. 这个是作者的实际做完DFA后得出的结论.原因倒是很简单,一个精密的产品,哪怕只是优化了一个零件,对整体的装配 ...
- [转] shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
[From] https://www.cnblogs.com/tony1314/p/8315666.html 1. 关于文件和目录 -f 判断某普通文件是否存在 -d 判断某目录是否存在 -b ...
- python 中mysql数据库的读写
1.读取数据库 import pymysql id=[] name=[] explain=[] db=pymysql.Connection(host=,user="root", p ...
- myEclipse修改字体大小
- 转帖 利用伪元素和css3实现鼠标移入下划线向两边展开效果
原帖地址 https://www.cnblogs.com/yangjunfei/p/6739683.html 感谢分享 一.思路: 将伪元素:before和:after定位到元素底部中间,设置宽度 ...
- Java - String中的==、equals及StringBuffer(转自CSDN 作者:chenrui_)
equals是比较值/对象是否相同,==则比较的是引用地址是否相同. == 如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象 package com.char3; public ...
- Java框架-mybatis01查询单个数据
1.什么是mybatis? mybatis是一个基于Java的持久层框架. 2.持久化:数据从瞬时状态变为持久状态. 3.持久层:完成持久化工作的代码块.---dao 4.Mybatis是帮助程序员将 ...
- 使用jsp完成商品列表的动态显示
1数据库准备工作 1创建数据库 2 创建product表 代码如下: CREATE TABLE `product` ( `pid` ) NOT NULL, `pname` ) DEFAULT NULL ...