简单说,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路径表达式笔记(转载)的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 5、XPath路径表达式详细介绍

    目录 1.XPath介绍 2.什么是XML 3.XML与HTML对比 4.为什么使用XPath定位页面中的元素 5.XPath中节点之间的关系 (1)节点的概念 (2)节点之间的关系类型 6.XPat ...

  2. Xpath学习笔记

    最近复习自己上一年的课本,想起来刚学那个时候想做一个写日记的软件. 想不如做,用控制台瞎写了一个,一做就成了,没什么bug,期间使用Xpath来读数据,所以就稍微学了一下. 学习过程就这样做一点笔记, ...

  3. xpath路径表达式

    简单说,xpath就是选择XML文件中节点的方法. 所谓节点(node),就是XML文件的最小构成单位,一共分成7种. - element(元素节点)- attribute(属性节点)- text ( ...

  4. jQuery官方基础教程笔记(转载)

    本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...

  5. 转:XPath路径表达式

    XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 XML 文档. & ...

  6. xpath语法笔记

    xpath是在xml文档中查找信息的语言, 其语法整理如下: 路径表达式(选取节点) div div下的所有子节点 /div 根节点下的div //div 匹配所有的div . 当前节点 .. 父节点 ...

  7. HtmlCleanner结合xpath用法(转载)

    HtmlCleaner cleaner = new HtmlCleaner(); TagNode node = cleaner.clean(new URL("http://finance.s ...

  8. Python爬虫:Xpath语法笔记

    一.选取节点 常用的路劲表达式: 表达式 描述 实例   nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpat ...

  9. XPath注入笔记

    XPath注入 XQuery注入 测试语句:'or '1'='1 利用工具: Xcat介绍 Xcat是python的命令行程序利用Xpath的注入漏洞在Web应用中检索XML文档 下载地址:https ...

随机推荐

  1. 认识CSS中布局之文档流、浮动、定位以及叠放次序

    前端之HTML,CSS(七) CSS CSS布局的核心就是盒子的摆放,即CSS定位.而CSS中定位机制分为:普通流(nomal flow).浮动(float).定位(position). 普通流 普通 ...

  2. C#嵌入字体

    1:将字体文件(*.ttf)添加到资源文件里,注意资源的名称 2:在Program.cs文件里声明 using System; using System.Collections.Generic; us ...

  3. Shell检查程序是否正常,并显示出程序启动时间、执行时间

    项目中多个实例,而每个实例均启动一个程序,本脚本将多个程序统一进行监控,并支持文件配置 #!/bin/sh bin=$(cd ``;pwd) cd ${bin} ### 定义检查函数 chkProgr ...

  4. ActivityManagerService数据结构Activity栈管理(二)

    ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...

  5. oracle--块信息深入解析

    一,创建 Data Block是数据库中最小的I/O单元 01,建立一个新的表空间 查看默认表空间位置 select TABLESPACE_NAME,FILE_NAME from dba_data_f ...

  6. (转)Python 标准库笔记:string模块

    String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 原文:http://www.10tiao.com/html/384/201709/2651305041/1.htm ...

  7. JS框架设计之主流框架的引入机制DomeReady一种子模块

    DomReady其实是一种名为"DomContentLoaded"事件的名称,不过由于框架的需要,它与真正的DomContentLoaded有区别,在旧的JS书籍中m都会让我们把J ...

  8. sencha touch SortableList 的使用

    转: sencha touch 2.3 多了一个  SortableList plugin, 可实现 list item 的拖动交换 Ext.require('Ext.plugin.SortableL ...

  9. Hibernate 多对一映射

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBL ...

  10. 6.006 Introduction to Algorithms

    课程信息 6.006 Introduction to Algorithms