- Web前端基础 XPath [ 笔记 ]

本文详细介绍了XPath的基本概念、节点类型、节点间的关系及路径表达式的使用方法,并通过实例展示了如何选取特定节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

介绍

节点

节点关系 描述并举栗

路径表达式 描述并举栗

选取特定节点 描述并举栗


介绍

对于XPath的概念,百度百科上是这么解释的:XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点 ... ... 提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。

 

节点

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

 

节点关系 描述并举栗

关系描述
每个元素以及属性都有一个父
元素节点可有零个、一个或多个子
同辈拥有相同的父的节点都属于同辈
先辈某节点的父、父的父、父的父的父,等等
后代某个节点的子、子的子、子的子的子,等等

现有如下的XML示例:

<?xml version="1.0" encoding="utf-8"?>
<shop>
    <food category="meat can">
        <name>canned pork</name>
        <year>2018</year>
        <price>10</price>
    </food >
    <food category="garden stuff">
        <name>canned canned yellow peach</name>
        <year>2018</year>
        <price>5</price>
    </food >
</shop>

在这个例子中我们可以看到:

父:shop为food category、name、year、price的父,而food category为name、year、price的父
子:name、year、price都是food category的子,food category、name、year、price又都是shop的子

同辈:name、year、price

先辈:shop、food category是name、year、price的先辈
后代:shop的后代是food category、name、year、price

 

路径表达式 描述并举栗

XPath中,使用的是路径表达式来选取XML中的节点或者节点集,一些常用的路径表达式有:

路径表达式路径的描述
nodename选取这个节点的所有子节点
/从根节点选取
//选择任意位置的某个节点
.选择当前节点
..选取当前节点的父节点
@选取属性
*匹配未知的元素
|选取多条路径

那么对于示例:

<?xml version="1.0" encoding="utf-8"?>
<shop>
    <food category="meat can">
        <name>canned pork</name>
        <year>2018</year>
        <price>10</price>
    </food >
    <food category="garden stuff">
        <name lang='en'>canned canned yellow peach</name>
        <year>2018</year>
        <price>5</price>
    </food >
</shop>

则有:

路径描述
shop选取shop元素的所有子节点
/shop选取根元素shop
shop/food category选取属于shop的子元素的所有的food category元素
//food category选取所有的food category,且不需要在意它们在XML中的位置
shop//food category选取属于shop的子元素的所有的food category元素,而不需要在意它们在shop之下的什么位置
//@lang选取名为lang的所有属性
/shop/*选取shop下的所有的子元素
//*选取所有元素
//food category/name | //food category/year选取food category下的name元素和year元素

 

选取特定节点 描述并举栗

一般选取特定节点,需要额外的对路径表达式去进行一些描述,这些描述通常被镶嵌在[ ]中,而写在[ ]中的这个部分,我们称之为谓语,那么对于示例:

<?xml version="1.0" encoding="utf-8"?>
<shop>
    <food category="meat can">
        <name>canned pork</name>
        <year>2018</year>
        <price>10</price>
    </food >
    <food category="garden stuff">
        <name>canned canned yellow peach</name>
        <year>2018</year>
        <price>5</price>
    </food >
    <food category="fast food">
        <name lang='en'>instant noodles</name>
        <year>2018</year>
        <price>8</price>
    </food >
</shop>

则有:

路径描述
/shop/food category[1]选取属于shop子元素的第一个food category元素
/shop/food category[last()]选取属于shop子元素的最后一个food category元素
/shop/food category[last()-1]选取属于shop子元素的倒数第二个food category元素
/shop/food category[position()<3]选取最前面的两个属于shop的子元素的food category元素
//name[@lang]选取所有拥有lang属性的name元素
//name[@lang=‘en’]选取所有拥有lang属性且属性值为en的name元素
/shop/food category[price>4]选取所有shop下的food category元素,且其中的price值要大于4
/shop/food category[price>4]/name选取所有shop下的food category元素下的name元素,且其中的price值要大于4
//name[@*]选取所有带有属性的name元素

 

以上资料大部分出自《Python爬虫开发于项目实战》一书

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值