XPath是什么?简单说,就是用来选择XML文件中节点的一套方法。这里的“节点”(node),可以理解为XML文件的最小构成单元,总共分七种:元素节点、属性节点、文本节点、名称空间节点、处理命令节点、注释节点和根节点。XPath能处理这所有七种,但日常工作中打交道最多的,还是元素节点(element)。所以,下面提到的“节点”和“元素”,基本可以当成一回事。
一、xpath表达式的基本格式
XPath通过“路径表达式”来选择节点,形式上跟传统文件系统路径非常像。
- 斜杠(/)作为路径内部的分隔符。
- 同一个节点,既可以写绝对路径,也可以写相对路径。
- 绝对路径必须用"/"起首,紧跟根节点,比如
/step/step/...。 - 相对路径则不用"/"起首,比如
step/step。 - “.”代表当前节点,“..”代表当前节点的父节点。
二、选择节点的基本规则
nodename(节点名称):选择该节点的所有子节点。/:选择根节点。//:选择文档中任意位置的某个节点。@:选择某个属性。
三、选择节点的实例
先看一个具体的XML文档,后面所有例子都基于它:
Harry Potter 29.99 Learning XML 39.95
【例1】bookstore:选取 bookstore 元素的所有子节点。
【例2】/bookstore:选取根节点bookstore(绝对路径)。
【例3】bookstore/book:选取所有属于 bookstore 的子元素的 book 元素(相对路径)。
【例4】//book:选择所有 book 子元素,不管它们在文档中的位置。
【例5】bookstore//book:选择所有属于 bookstore 元素的后代的 book 元素,不管它们位于 bookstore 之下的什么位置。
【例6】//@lang:选取所有名为 lang 的属性。
四、xpath的谓语条件(Predicate)
所谓“谓语条件”,就是对路径表达式附加的筛选条件。所有条件都写在方括号[]中,进一步限定节点范围。
【例7】/bookstore/book[1]:选择bookstore的第一个book子元素。
【例8】/bookstore/book[last()]:选择bookstore的最后一个book子元素。
【例9】/bookstore/book[last()-1]:选择bookstore的倒数第二个book子元素。
【例10】/bookstore/book[position()<3]:选择bookstore的前两个book子元素。
【例11】//title[@lang]:选择所有具有lang属性的title节点。
【例12】//title[@lang='eng']:选择所有lang属性的值等于"eng"的title节点。
【例13】/bookstore/book[price]:选择bookstore的book子元素,且被选中的book元素必须带有price子元素。
【例14】/bookstore/book[price>35.00]:选择bookstore的book子元素,且被选中的book元素的price子元素值必须大于35。
【例15】/bookstore/book[price>35.00]/title:在例14的结果集中,选择title子元素。
【例16】/bookstore/book/price[.>35.00]:选择值大于35的/bookstore/book的price子元素。
五、通配符
*:匹配任何元素节点。@*:匹配任何属性值。node():匹配任何类型的节点。
【例17】//*:选择文档中的所有元素节点。
【例18】/*/*:选择所有第二层的元素节点。
【例19】/bookstore/*:选择bookstore的所有元素子节点。
【例20】//title[@*]:选择所有带有属性的title元素。
六、选择多个路径
用竖线|连接多个并列的路径。
【例21】//book/title | //book/price:同时选择book元素的title子元素和price子元素。