XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。

  XPath使用路径表达式在XML文档中进行导航;XPath包含一个标准函数库;XPath是XSLT中的主要元素;XPath是W3C标准。

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

  节点(Node):XML文档是作为节点树来对待的。树的根被称为文档节点或者根节点。

  <?xml version="1.0" encoding="ISO-8859-1" ?>

  <bookstore>  <!-- 文档节点 -->

    <book>

      <title lang="en'>Harry Potter</title>

      <author>K. Rowling</author>  <!-- 元素节点 -->

      <year>2015</year>

      <price>29.99</price>

    </book>

  </bookstore>

  基本值(原子值):无父或无子的节点

  项目:基本值或节点

  XPath使用路径表达式来获取XML文档中的节点或节点集。节点是通过沿着路径或步来选取的。

  路径表达式:

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

  /                  从根节点选取

  //                 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置

  .          选取当前节点

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

  @      选取属性

 

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

  /bookstrore/book[1]   选取boostore子元素的第一个book元素

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

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

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

  //title[@lang]   选取所有拥有名为lang的属性的title元素

  //title[@lang="eng"]  选取所有title元素,且这些元素拥有eng的lang值

  /bookstore/booke[price>35.00]  选取bookstrore元素所有book元素,且其中的price值须大于35

  /bookestore/book[price>35]/title  选取bookestore元素中的book元素的所有title元素,且中的price值必须大于35

  

  XPath可以使用通配符来选取未知的XML元素

  *  匹配任何元素节点

  @*  匹配任何属性节点

  node()  匹配任何类型节点

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

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

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

 

  选取若干路径:通过在路径表达式中使用|运算符,可以选取若干路径

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

  //title|//price  选取文档中的所有title和price元素

  /bookstore/book/title|//price 选取bookstroe元素的book元素中所有的title和price元素

 

  XPath轴:相对于当前节点的节点集

  ancestor  选取当前节点的所有先辈

  ancestor-or-self  选取当前节点的所有父辈及当前节点本身

  attribue  选取当前节点的所有属性值

  child   选取当前节点的所有子元素

  descendant  选取当前节点的所有后代元素

  descendant-or-self  选取当前节点的所有后代元素以及当前节点本身

  following 选取文档中当前节点的结束标签之后的所有节点

  namespace  选取当前节点的所有命名空间节点

  parent  选取当前节点的的父节点

  preceding  选取文档中当前节点的开始标签之前的所有节点

  preceding-sibling  选取当前节点之前的所有同级节点

  self  选取当前节点

  位置路径可以是绝对的,也可以是相对的。绝对路径起始于正斜杠/。

  步(step)包括:

  轴:定义所选节点域当前节点之间的树关系

  节点测试:识别某个轴内部的节点

  另个或多个谓语,更深入的提炼所选的节点集

  chile:book 选取所有属于当前节点的子元素的book节点

  atrribute::lang 选取当前节点的lang属性

  child::*  选取当前节点的所有子元素

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

  child::text()  选取当前节点的所有文本子节点

  child::node()  选取当前节点的所有子节点

  descendant::book 选取当前节点的所有book后代

  ancestor::book  选取当前节点的所有book先辈

  ancestor-or-self::book  选取当前节点的所有book先辈及当前节点

  child::*/child::price 选取当前节点的所有price孙节点