Xpath学习之路!

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

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

W3C上的实例文档为:






  Harry Potter
  29.99



  Learning XML
  39.95



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





你可能感兴趣的:(Xpath学习之路!)