XPath语法 XPath使用路径表达式在XML文档中选择结点或结点集。 下面是一个XML例子,我们将用它来说明XPath语法: <?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> 一、选择结点 表达式 说明 结点名 选择当前结点的所有子结点 / 从根结点开始 // 从当前结点开始选择符合条件的结点 . 选择当前的结点 .. 选择当前结点的双亲 @ 选择属性 举例说明如下: 表达式 说明 bookstore 选择bookstore元素的所有子结点 /bookstore 选择根元素bookstore bookstore/book 选择bookstore下的所有book子元素 //book 选择文档中的所有book元素 bookstore//book 选择bookstore下的所有book子孙元素 //@lang 选择所有名为lang的属性 二、谓词 谓词用于寻找特定的结点或一个包含特定值的结点。谓词包括在方括号中。 举例说明如下: 表达式 说明 /bookstore/book[1] 选择bookstore元素下的第一个book子元素 /bookstore/book[last()] 选择bookstore元素下的最后一个book子元素 /bookstore/book[last()-1] 选择bookstore元素下的最后一个book子元素,book子元素应是 bookstore下唯一的一个 /bookstore/book[position()<3] 选择bookstore元素下开始的两个book子元素 //title[@lang] 选择所有的包含属性名为lang的title元素 //title[@lang='eng'] 选择所有的包含属性名为lang且属性值为eng的title元素 /bookstore/book[price>35.00] 选择bookstore元素下的所有包含值大于35.00的price元素的book子 元素 /bookstore/book[price>35.00]/title 选择bookstore元素下的所有包含值大于35.00的price元素 的book子元素下的title子元素 三、选择未知的结点 表达式 说明 * 匹配任何的元素结点 @* 匹配任何的属性结点 node() 匹配任何类型的结点 举例说明如下: 表达式 说明 /bookstore/* 选择bookstore元素下的所有子结点 //* 选择文档中的所有元素 //title[@*] 选择所有的title元素不管其属性如何 四、多路径选择 通过有表达式中使用|操作符,你可以进行多路径选择。 示例如下: 表达式 说明 //book/title | //book/price 选择所有book元素下的title和price子元素 //title | //price 选择文档中的所有的title和price元素 /bookstore/book/title | //price 选择/bookstore/book/下的title子元素和文档中的所有price元素 五、XPath轴心 一个轴心定义了相对于当前结点的结点集,例表如下: 轴心名 说明 ancestor 选择当前结点的所有祖先 ancestor-or-self 选择当前结点及其所有祖先 attribute 选择当前结点的所有属性 child 选择当前结点的所有子女 descendant 选择当前结点的所有子孙 示例说明: 表达式 说明 child::book 选择当前结点的所有book子结点 attribute::lang 选择当前结点的lang属性 child::* 选择当前结点的所有子女 attribute::* 选择当前结点的所有属性 child::text() 选择当前结点的所有文本子结点 child::node() 选择当前结点的所有子结点 descendant::book 选择当前结点的所有子孙book ancestor::book 选择当前结点的所有祖先book ancestor-or-self::book 选择当前结点的所有祖先book,如果当前结点也是book,那么包含当前结点 child::*/child::price 选择当前结点的所有孙子结点price descendant-or-self 选择当前结点及其所有子孙 following 选择当前结点结束标记后的东西 following-sibling 选择当前结点后的所有同科 namespace 选择当前结点的所有名字空间结点 parent 选择当前结点的双亲 preceding 选择当前结点开始标记前的东西 preceding-sibling 选择当前结点前的所有同科 self 选择当前结点

评论