1. Xpath使用路径表达式还选取文档种的节点或者节点集, 节点是通过沿着路径或者步来选取的。

<?xml version="1.0" encoding="UTF-8"?>

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

bookstore   -  选取bookstore元素的所有子节点

/booksotre - 选取根元素bookstore   /代表绝对路径

bookstore/book   - 选取属于bookstore的子元素的所有book元素

//book  - 选取所有的boo元素,不管他们的位置

booksotre//book -选取属于bookstore的后代的所有book元素,而不管他们的位置

//@lang  - 选取名为lang的所有属性的元素

 

2. xpath谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点

谓语被嵌套在方括号里面

/booksotre/book[1]   - 选取bookstore的子元素,第一个为book的元素

/bookstore/bokk[last()]   -  选取bookstore的子元素,最后一个为book的元素

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

/bookstore/book[position()<3]-  选取bookstore的子元素,最前面两个为book的元素

//title[@lang] - 选取title元素  有属性lang的元素

//title[@lang='eng']  - 选取title元素  有属性lang的元素 且lang=eng

/bookstore/book[price>35]   选取booksotore下的book子元素,且price > 35

/bookstore/book[price<35]/title  - 选取booksotre下所有的book元素,且price <35, book下的title元素

 

3. 选取未知节点

*    匹配任何元素节点

@*  匹配任何属性节点

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

 

4. xpath 轴

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

ancestor  - 当前节点的所有先辈 (父,祖父)

attribute - 选取当前节点的所有属性

child - 当前节点的所有子元素

descendant - 当前节点的所有后代元素(子,孙)

following - 当前节点的结束标签之后的所有节点

following-sibling - 当前节点之后的所有兄弟节点

parent - 选档节点的父节点

preceding  - 当前节点的开始标签之前的所有节点

preceding-sibling - 当前节点开始标签之前的所有同级节点

 

5. xpath轴的语法

/bookstore/child::book    - bookstore下所有为book的子节点

//book/attribute::lang    - 所有book下attribute为lang的内容

/bookstore/child::*  -  bookstore节点下所有的子节点

//book/attribute::*  - 所有book节点下的所有的属性

/bookstore/book/child::text()  - 当前节点下得多有子节点的文字 

  

6.练习

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</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>

- 选取所有的title    //title   /bookstore/book/title

- 选取第一个book的title   //book[1]/title   /bookstore/book[1]/title

- 选取所有的price节点种的所有文本  //price/text()   /bookstore/book/price/text()

-选取价格高于35的price节点  //price[text()>35]  /bookstore/book[price>35]/price

- 选取价格高于35的title节点   //price[text()>35]/preceding-sibling::title

posted on 2018-07-18 14:48  srialy  阅读(148)  评论(0编辑  收藏  举报