1 什么是xpath
xpath是xml path的缩写,它是一种表达式语言,用于定位xml树中的结点。
2 “/”和“//”的区别
比如"/html/body",取出来的就是该html的body部分所有的内容。
“/”是用来构成绝对路径的,从root结点开始。
“//”是相对寻址的,比如//p,会找到html中的所有的<p></p>,无论它们在什么位置。
3 predicate
方括号[xxx]被称为predicate,它作用于一个子集合,用于进一步缩小该子集合的范围。
比如://list/item,将会将list node下所有的item node都选定,但是如果加上一个predicate,//list/item[@lang],那么就加了一个条件,该item必须有@lang这个属性,这样将不满足条件的item node给剔除掉了。
4 axis
axis是用来进行更加精准定位的。axis定义了一个相对于当前node的一个node set,也就是说,它基于的对象是node。
首先通过绝对路径定位一个比较好定位的node,然后通过axis进行精准定位。
例如:
//div[@id='div1']/child::img
首先找到id为div1的div,然后找到它所有的child node中名字为img的node。
5 xml的node
5.1 基本的node
element node和attribute node
<bookstore> (root element node)
<author>J K. Rowling</author> (element node)
lang="en" (attribute node)
5.2 node之间的关系,axis就是用的node之间的关系进行的定位
parent,每个element node和attribute node都只有一个parent。
child,每个element node有0个、1个或者多个child node。
ancester,所有的祖先的集合,一直到root node。
descendant,所有的child的集合,一直到叶子,即到属性node。
6 有用的函数
6.1 last()
一个集合中的最后一个元素,用于predicate中。
6.2 text()
获取一个node中的text()。
7 表达式
>,=,|
“|”两个集合的并集。
8 一个path中使用了两个“//”是什么意思
两个都是任意的意思,只是前面一个的任意的范围比后面一个要大,后面一个任意是在前面的基础上进一步任意。