首页 > 其他分享 >Xpath用法及其常用函数

Xpath用法及其常用函数

时间:2022-11-06 09:55:05浏览次数:86  
标签:Xpath XPath 函数 元素 选取 book bookstore 用法 节点

目录
XPath简介
XPath语法
选取节点
谓语(Predicates)
选取未知节点
选取若干路径
XPath 轴
XPATH的几个常用函数
XPath简介
XPath (XML Path Language)是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。在Python爬虫中,我们可以利用 XPath 快速地定位 HTML\XML 响应中的特定元素以及获取节点的信息,并且通常情况下会比使用正则表达式提取更简单而且更高效。

XPath语法
我们将以下面的这个 XML 文档为例对XPath的语法进行示例。

<?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
2
3
4
5
6
7
8
9
10
11
选取节点
XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (step) 来选取的。

下面列出了最有用的路径表达式:

表达式 描述
nodename 选取所有nodename子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
… 选取当前节点的父节点。
@ 选取属性。
text() 选取文本
下面是一些实例:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点
/bookstore 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book 选取属于 bookstore 的子元素的 所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。
//title/text() 选取所有 title 元素的文本。
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。

路径表达式 描述
/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。
选取未知节点
XPath 通配符可用来选取未知的 XML 元素。

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。
下面是一些实例:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。
选取若干路径
通过在路径表达式中使用“|”运算符,您可以选取若干个路径。
| 路径表达式 | 结果|

 

XPath 轴
轴可定义相对于当前节点的节点集。

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。
下面是一些实例:


XPATH的几个常用函数
函数 描述
contains () //div[contains(@id,‘in’)] ,表示选择id中包含有’in’的div节点
text() 由于一个节点的文本值不属于属性,比如“baidu”,所以,用text()函数来匹配节点://a[text()=‘baidu’]
starts-with() //div[starts-with(@id,‘in’)] ,表示选择以’in’开头的id属性的div节点
not()函数 表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))] ,表示匹配出name为identity并且class的值中不包含a的input节点。 not()函数通常与返回值为true or false的函数组合起来用,比如contains(),starts-with()等,但有一种特别情况请注意一下:我们要匹配出input节点含有id属性的,写法如下://input[@id],如果我们要匹配出input节点不含用id属性的,则为://input[not(@id)]

标签:Xpath,XPath,函数,元素,选取,book,bookstore,用法,节点
From: https://www.cnblogs.com/fredy0902/p/16861943.html

相关文章

  • C语言初级阶段5——函数1
    C语言初级阶段5——函数1函数的基本概念1.函数:理解为封装功能的容器。主函数是函数的入口2.函数定义的基本格式:返回值类型:常用的基本数据类型,执行完以后,函数会得到一......
  • C语言初级阶段5——函数2
    C语言初级阶段5——函数2址传递1.地址:在定义变量,数组,函数等等,系统会自动给分配他们的内存区域(地址),把这个数据放到这个地址上面。2.&:&a得到a的地址编号3.*:定义指针变......
  • [Mathematical Analysis] 函数极限与连续函数(待续……)
    写在前面要当一个创造者。整理这些笔记是为了有所创造。要有所创造,就必须对我所讨论的问题本身有充分的理解,创造的就是在理解和归纳的过程中找到的最符合我个人的最自然......
  • Java函数式编程:三、流与函数式编程
    本文是Java函数式编程的最后一篇,承接上文:Java函数式编程:一、函数式接口,lambda表达式和方法引用Java函数式编程:二、高阶函数,闭包,函数组合以及柯里化前面都是概念和铺垫,主......
  • C#中$用法
    一、C#中$的作用$,是C#6.0语法中模板字符串的一种写法。模板字符串是什么?格式化字符串:string.format()这个方法。$是为了替代string.format(),可以把字......
  • Python 函数
    在Python中,使用def关键词定义函数 defmy_fun():print("Hellofromafunvtion")#调用函数#如需调用函数,请使用函数名称跟括号my_fun()参数在函数名后的......
  • 实验三 函数应用编程
    1.任务1#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);voidprint_space......
  • 两个数比较(调用函数比较)
    1.使用if...else...比较2.调用函数比较(1)调用函数应该放在主函数前面。在主函数中,调用max=Max(num1,num2)。......
  • postgresql函数:满足特定格式的表及指定日期前的删除
    --一、现有函数--1、现有函数调用select"ap"."delete_analysis_backup"('ap');--2、函数内容CREATEORREPLACEFUNCTION"ap"."delete_analysis_backup"("schema_name"......
  • strcpy函数
    1.strcpy的一般用法#include<stdio.h>#include<string.h>intmain(){chararr1[]={"abcdefg"};//一般用法chararr2[]={"hehe"};printf("%s",strcpy(arr1,......