XPath 语法

  • 定义和使用

    XPath 使用路径表达式来选择XML文档中的节点或节点集。通过遵循路径或步骤选择节点。
    在下面的示例中,我们将使用以下 XML 文档。
    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore>
      <book>
        <title lang="en">中国历史手册</title>
        <price>30.00</price>
      </book>
      <book>
        <title lang="en">学习 XML</title>
        <price>39.99</price>
      </book> 
    </bookstore>
  • 选择节点

    XPath 使用路径表达式来选择 XML 文档中的节点;通过遵循路径或步骤选择节点;下面列出了最有用的路径表达式:
    表达式 描述
    nodename 选择所有名称为 "nodename" 的节点
    / 从根节点选择
    // 从当前节点中选择匹配选择的节点,无论它们在何处
    . 选择当前节点
    .. 选择当前节点的父节点
    @ 选择属性
    在下表中,我们列出了一些路径表达式和表达式的结果:
    路径表达式 描述
    bookstore 选择所有名称为 "bookstore" 的节点
    /bookstore
    选择根元素书店
    注意:如果路径以斜杠(/)开头,则始终表示元素的绝对路径!
    bookstore/book 选择所有属于书店子级的书本元素
    //book 选择所有书籍元素,无论它们在文档中的位置如何
    bookstore//book 选择作为 bookstore 元素后代的所有 book 元素,无论它们在 bookstore 元素下的位置如何
    //@lang 选择所有名为lang的属性
  • 谓词

    谓词用于查找特定节点或包含特定值的节点。
    谓词始终嵌入在方括号中。
    在下表中,我们列出了一些带有谓词的路径表达式以及表达式的结果:
    路径表达式 描述
    /bookstore/book[1]
    选择作为 bookstore 元素的子元素的第一个 book 元素。
    注意:在 IE 5,6,7,8,9 中,第一个节点是[0],但根据 W3C,它是[1]。 要解决 IE 中的此问题,请将 SelectionLanguage 设置为 XPath:
    在 JavaScript 中:xml.setProperty("SelectionLanguage","XPath")
    /bookstore/book[last()] 选择作为bookstore元素的子元素的最后一个book元素
    /bookstore/book[last()-1] 选择最后但只有一个book元素,它是bookstore元素的子元素
    /bookstore/book[position()<3] 选择作为书店元素的子元素的前两个书元素
    //title[@lang] 选择所有具有名为lang的属性的标题元素
    //title[@lang='en'] 选择所有具有 “lang” 属性且值为 “en” 的标题元素
    /bookstore/book[price>35.00] 选择书店元素中所有价格元素大于 35.00 的书元素
    /bookstore/book[price>35.00]/title 选择书店元素的书元素的所有标题元素,它们的价格元素的价格大于35.00。
  • 选择未知节点

    XPath 通配符可用于选择未知的 XML 节点。
    通配符 描述
    * 匹配任何元素节点
    @* 匹配任何属性节点
    node() 匹配任何种类的任何节点
    在下表中,我们列出了一些路径表达式和表达式的结果:
    路径表达式 描述结果
    /bookstore/* 选择书店元素的所有子元素节点
    //* 选择文档中的所有元素
    //title[@*] 选择至少具有任何一种属性的所有标题元素
  • 选择几个路径

    通过使用 | 在 XPath 表达式中,您可以选择多个路径。
    在下表中,我们列出了一些路径表达式和表达式的结果:
    路径表达式 描述结果
    //book/title | //book/price 选择所有book元素的所有title和price元素
    //title | //price 选择文档中的所有title和price元素
    /bookstore/book/title | //price 选择bookstore元素的book元素的所有title元素以及文档中的所有price元素