Xpath学习之路!

近期为了学习scrapy,回头来在W3C上学习Xpath。我会不断在自己博客上总结知识点,并附带自己的理解。

首先,小松鼠也是刚起步,有些理解不到位的地方,请各位大佬多多指教,这里主要总结一些xpath的基础语法。

W3C上的实例文档为:

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

xpath是使用路径表达式在文档中选取节点的。而节点是通过沿着路径或者步数来选取的。

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

nodename:选取次节点的所有子节点

/                :   从根节点选取

//               :   从匹配选择的当前节点选择文档中的节点,不用考虑该节点在文档中的位置

.                :选取当前节点

..               :选取当前节点的父节点

@             :选取属性


例如:

bookstore              :选取bookstore节点的所有子节点

/bookstore             :选取bookstore节点(加入路径起始于“/”,那么次路径始终代表到达某元素的绝对路径)

bookstore/book     :选取属于bookstore的子节点的所有book节点

//book                    :选取文档中所有的book节点,不管次节点在文档中的什么位置

bookstore//book    :选取属于bookstore的子节点的所有book节点,不管book位于bookstore之下的什么位置。

//@lang                 :选取名为lang的所有属性


谓语:

谓语用来查找某个特定的节点或者包含某个指定值的节点。谓语被嵌在方括号中。

/bookstore/book                                  :选取属于bookstore子元素的第一booke元素

/bookstore/book[last()]                        :选取属于bookstore子元素的最后一个book元素

/bookstore/book[last()-1]                     :选取属于bookstore子元素的倒数第二个book元素

/bookstore/book[position()<3]             :选取前面2个属于bookstore子元素的book元素

//title[@lang]                                       :选取所有包含lang属性的title元素

//title[@lang = 'eng']                            :选取所有title元素,并且这些元素的属性值都为eng

/bookstore/book[price>35.00]             :选取属于bookstore子元素的book元素,并且其中price值要大于35


xpath的通配符:

*            :匹配任何元素节点

@*        :匹配任何属性节点

node()  :匹配任何类型的节点

例如:

/bookstore/*      :选取bookstore元素的所有子元素

//*                      :选取文档中的所有元素

//title[@*]           :选取所有带有属性的title元素


xpath中的and连接符“|”


//book/title | //book/price            :选取book元素的所有title和price元素

//title | //price                              :选取所有的title和price元素





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值