Python XPath 运算符的种类及其功能

2023-04-17 00:00:00 功能 运算符 种类

Python XPath 运算符主要分为以下几类:

  1. 路径表达式运算符
    - /:从根节点开始选取,如/bookstore/book选取根节点下的bookstore节点下的所有book节点。
    - //:选取节点下的所有子节点,如//book选取所有book节点。
    - .:选取当前节点,如./book选取当前节点下的book节点。
    - ..:选取当前节点的父节点,如../bookstore选取当前节点的父节点下的bookstore节点。
    - @:选取属性节点,如//book[@category]选取所有拥有category属性的book节点。

  2. 逻辑运算符
    - and:与运算,如//book[price>35 and @category='CHILDREN']选取所有价格大于35且类别为CHILDREN的book节点。
    - or:或运算,如//book[price>35 or @category='CHILDREN']选取所有价格大于35或类别为CHILDREN的book节点。
    - not:非运算,如//book[not(@category='FICTION')]选取所有类别不是FICTION的book节点。

  3. 比较运算符
    - =:等于,如//book[price=35]选取所有价格等于35的book节点。
    - !=:不等于,如//book[price!=35]选取所有价格不等于35的book节点。
    - <:小于,如//book[price<35]选取所有价格小于35的book节点。
    - >:大于,如//book[price>35]选取所有价格大于35的book节点。
    - <=:小于等于,如//book[price<=35]选取所有价格小于等于35的book节点。
    - >=:大于等于,如//book[price>=35]选取所有价格大于等于35的book节点。

  4. 算术运算符
    - +:加法,如//book[price+5]选取所有价格加5后的结果。
    - -:减法,如//book[price-5]选取所有价格减5后的结果。
    - *:乘法,如//book[price*2]选取所有价格乘2后的结果。
    - div:除法,如//book[price div 2]选取所有价格除2后的结果。
    - mod:取余,如//book[count() mod 2=1]选取所有子节点数量为奇数的book节点。

代码演示:

from lxml import etree

# 创建 XML 文档
xml = etree.XML('''<bookstore>
                      <book category="CHILDREN">
                        <title lang="en">The Cat in the Hat</title>
                        <author>Dr. Seuss</author>
                        <year>1957</year>
                        <price>29.99</price>
                      </book>
                      <book category="COOKING">
                        <title lang="en">Everyday Italian</title>
                        <author>Giada De Laurentiis</author>
                        <year>2005</year>
                        <price>30.00</price>
                      </book>
                      <book category="WEB">
                        <title lang="en">Learning XML</title>
                        <author>Erik T. Ray</author>
                        <year>2003</year>
                        <price>39.95</price>
                      </book>
                    </bookstore>''')

# 执行 XPath 表达式
result = xml.xpath("//book[price>35]")

# 输出结果
for book in result:
    print(book.xpath('title//text()')[0], book.xpath('price//text()')[0])

输出结果:

Learning XML 39.95

相关文章