Xpath学习笔记

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。

<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>

上述代码中,book元素是title、author、year、price的父节点,反过来即是子节点
同胞节点:拥有相同父节点的节点
先辈:某节点的父,父的父
后代:同理类推

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/bookstore 选取根元素 bookstore。
注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。

实例

>

/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。

选取未知节点

/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

### 关于XPath学习笔记与教程 #### XPath简介 XPathXML Path Language)是一种用于在XML文档中定位和检索数据的语言。它可以通过路径表达式来导航XML树结构,从而获取所需的节点或属性[^3]。 #### 基础语法示例 以下是几个常见的XPath表达式及其功能: 1. **一般表达式** 使用路径方式选取所需元素。 ```python "/bookstore/book/title" ``` 这一表达式表示从根节点`<bookstore>`出发,找到所有的`<book>`标签下的`<title>`子节点[^2]。 2. **谓词表达式** 谓词允许进一步筛选符合条件的节点。 ```python "/bookstore/book[1]" ``` 表达式中的 `[1]` 是指第一个 `<book>` 元素;而 `/bookstore/book[last()]` 则会选中最后一个 `<book>` 元素[^2]。 3. **通配符表达式** 当不确定具体节点名称时,可以利用通配符 `*` 来匹配任意类型的节点。 ```python "/bookstore/*" "//title[@*]" ``` 上述两个例子分别代表了 bookstore 的所有直接子节点以及具有任何属性的 title 元素。 4. **轴表达式** 轴定义了一组相对当前上下文节点的关系方向。 ```python "child::book" "attribute::lang" "descendant-or-self::*" ``` 第一条命令返回的是 book 子节点集合;第二条则提取出名为 lang 的属性列表;第三种情况涵盖了本节点本身加上其全部后代节点。 5. **算术与逻辑操作** 支持基本数值计算及条件判断。 ```python "/bookstore/book[price>35.00]/title" ``` 此处仅选出价格超过 35 的书籍标题。 #### Python实现案例 下面展示如何借助第三方库lxml解析并查询HTML/XML文件内的信息: ```python from lxml import etree # 创建一个简单的 XML 文档对象模型 (DOM) root = etree.XML(""" <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="zh-CN">Harry Potter</title> <author>J.K. Rowling</author> <year>2007</year> <price>29.99</price> </book> </bookstore> """) # 查找所有书名 titles = root.xpath('//book/title/text()') print(titles) # 获取特定语言版本的图书数量 english_books_count = len(root.xpath("//book[./title/@lang='en']")) print(english_books_count) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值