<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book type=”hardback”>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<isbn>0525934189</isbn>
</book>
<book type=”paperback”>
<title>A Burnt-Out Case</title>
<author>Graham Greene</author>
<isbn>0140185399</isbn>
</book>
</books>
每个结点可以是以下七个类型之一:根(root)、元素(element)、属性(attribute)、正文(text)、命名空间(namespace)、处理指令(processing instruction)和注释(comment)
所有的book元素://books/book
双正斜杠(//)表示返回XML文档中的所有符合查找准则的元素,而忽略文档中元素的位置级别。
所有的ISBN元素:/books/book/isbn
返回如下的元素:
<books>
<book type=”hardback”>
<isbn>0525934189</isbn>
</book>
<book type=”paperback”>
<isbn>0140185399</isbn>
</book>
</books>
所有标题为Atlas Shrugged的book元素:/books/book[title=”Atlas Shrugged”]
/books/book[author]
方括号符号让你使用属性作为查找准则
所有type属性值为hardback的书://book[@type=”hardback”]
返回下面的元素:
<book type=”hardback”>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<isbn>0525934189</isbn>
</book>
方括号符号在XPath文档中称为谓词,方括号的另外一个用途是标识需要检索的项数。
返回第一个book元素:/books/book[1]
<book type=”hardback”>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<isbn>0525934189</isbn>
</book>
用通配符(*)可以很容易的检索到在根结点下的所有元素。
所有的book元素:/books/*
所有属性type值为hardcover或softcover的book元素://books/book[@type=”hardcover”] | //books/book[@type=”softcover”]
符号(|)与逻辑OR操作符相同。
语句的第一个字符决定参考点,以正斜杠(/)开始的语句被看作查询时将使用绝对路径。
使用相对路径的例子:
在当前的参考点下开始查找
book/*
单个圆点表示选择当前结点,双圆点表示选择父结点。
当前结点的父结点的所有子结点:
../*
==============================================================================================================
<A id="a1">
<B id="b1">
<C id="c1">
<B name="b"/>
<D id="d1"/>
<E id="e1"/>
<E id="e2"/>
</C>
</B>
<B id="b2"/>
<C id="c2">
<B/>
<D id="d2"/>
<F/>
</C>
<E/>
</A>
/A/B/C[1] A元素→B元素→C元素的第一个子元素 name值为b的B元素
/A/B/C[last()] A元素→B元素→C元素的最后一个子元素 id值为e2的E元素
/A/B/C[position()>1] A元素→B元素→C元素之下的位置号大于1的元素 id值为d1的D元素和两个具有id值的E元素
//B[@id] 所有具有属性id的B元素 id值为b1和b2的两个B元素
//B[@*] 所有具有属性的B元素 两个具有id属性的B元素和一个具有name属性B元素
//B[not(@*)] 所有不具有属性的B元素 A元素→C元素下的B元素
//B[@id="b1"] id值为b1的B元素 A元素下的B元素
//E/parent::* 所有E节点的父节点元素 id值为a1的A元素和id值为c1的C元素
//F/ancestor::* 所有F元素的祖先节点元素 id值为a1的A元素和id值为c2的C元素
/A/child::* A的子元素 id值为b1、b2的B元素,id值为c2的C元素,以及没有任何属性的E元素
/A/descendant::* A的所有后代元素 除A元素以外的所有其它元素
//F/self::* 所有F的自身元素 F元素本身
//F/ancestor-or-self::* 所有F元素及它的祖先节点元素 F元素、F元素的父节点C元素和A元素
/A/C/descendant-or-self::* 所有A元素→C元素及它们的后代元素 id值为c2的C元素、该元素的子元素B、D、F元素
/A/C/following-sibling::* A元素→C元素的紧邻的后序所有兄弟节点元素 没有任何属性的E元素
/A/C/preceding-sibling::* A元素→C元素的紧邻的前面所有兄弟节点元素 id值为b1和b2的两个B元素
/A/B/C/following::* A元素→B元素→C元素的后序的所有元素 id为b2的B元素、无属性的C元素、无属性的B元素、id为d2的D元素、无属性的F元素、无属性的E元素。
/A/C/preceding::* A元素→C元素的前面的所有元素 id为b2的B元素、id为e2的E元素、id为e1的E元素、id为d1的D元素、name为b的B元素、id为c1的C元素、id为b1的B元素