目前xpath2.0还没有正式定稿,因此本文的讨论是基于xpath1.0.
xpath支持四种基本类型:
1. node-set
2. string
3. number
4. boolean
我们知道一个location step由axis,node test和predicate三部分组成,而用于查询xml文档的xpath又是由若干location step组成,比如/table/row[id='0000']。在predicate中几乎总是需要运用=,!=,<,<=,<=进行比较。而对于不同的对象如何进行比较,尤其是涉及到node-set的比较却是十分容易使人困惑。比如对下面文档进行root/numbers[integer/@value > 4]<root>查询。
<numbers>
<integer value="4" />
<integer value="2" />
<integer value="3" />
</numbers>
<numbers>
<integer value="2" />
<integer value="3" />
<integer value="6" />
</numbers>
</root>
下面我以伪代码的形式解释xpath中是如何比较不同对象的。其中compareobjects涉及到
boolean compareobjects(object operand1,object operand2,string operator)throws exception{
//both objects to be compared are node-sets
if(both operand1 and operand2 are node-sets){
iterator i1 = operand1.iterator();
iterator i2 = operand2.iterator();
while((node1 =i1.next()!=null){