XQuery表达式之路径表达式(Path Expression)

来源:互联网 发布:博睿网络监测 编辑:程序博客网 时间:2024/04/29 20:23
[如需转载,请注明出处]

路径表达式其实就是XPath在XQuery中的应用。如果熟悉了XPath,那么对XQuery中的路径表达式也就了解了。
一个路径表达式由一个或多个Step组成,Step由“/“或"//"区分。表示每一个Step都会在前一个Step产生的序列的基础上进一步筛选。Step又分为轴Step和过滤表达式。
下面分别讨论这两种Step
1。轴表达式
轴表达式由轴、节点测试和谓词构成,它们又通过自己方式进行筛选。我们知道一个XML文档可以看作一个节点树,XML文档共有七种节点:
   文档节点(document node)
   元素节点(element node)
   属性节点(attribute node)
   文本节点(text node)
   处理指令节点(processing-instruction node)
   名称空间节点(namespace node)
   注释节点(comment node)
既然是一棵树就有层次关系,一个节点是另外一个节点的父亲,也可能是另外别的节点的兄弟。轴表达式中的轴就是为了表述这种方向的筛选。节点测试则是在所选定的方向上根据节点名字进一步筛选。谓词则是通过给定条件的限定来进一步筛选。举一个例子,给一个XML文档
<xml version="1.0">
<persons>
    <person id="1">
        <firstname>Ramon</firstname>
        <lastname>Liu</lastname>
    </person>
   <person id="2">
        <firstname>Molly</firstname>
        <lastname>Niu</lastname>
   </person>
</persons>
那么我们可以通过/child::persons/child::person[position()=1]/child:firstname/text()来取得”Ramon“文本。
其中child::是轴,person,firstname是名字测试(节点测试的一种,另外一种是类型测试),而position()=1则是谓词,position()是XPath定义的函数。text()是类型测试。
这条XPath语句首先找到当前节点下的名字为persons的孩子,此时当前节点为根节点也就是document node,然后再在所有的persons下找到第一个名字为person的孩子,再接着找到在找到的person下找名字为firstname的孩子,最后找到它的文本节点。
XPath中的轴共有以下几种
child::
descendant::
attribute::
self::
descendant-or-self::
following-sibling::
following::
parent::
ancestor::
preceding-sibling::
preceding::
ancestor-or-self::
而每个轴又有各自的简写方法。关于它们各自的含义和简写方法可以参看W33C的网站。上面的XPath就可以简写为/persons/person[1]/firstname/text()。
2。过滤表达式
过滤表达式比较简单,它是由基本表达式加一个或多个谓词组成。
如:
$order[price gt 100],$order是一个变量引用,当$order引用作为上下文时它的孩子price的值大于100时,返回$order引用的节点或值
(1 to 8)[. mod 2 eq 0],返回(2,4,6,8)





原创粉丝点击