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中的轴共有以下几种
(1 to 8)[. mod 2 eq 0],返回(2,4,6,8)
路径表达式其实就是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)
- XQuery表达式之路径表达式(Path Expression)
- XQuery表达式之基本表达式(Primary Expression)
- XQuery表达式之序列表达式(Sequence Expression)
- XQuery表达式之量化表达式(Quantified Expression)
- XQuery表达式之条件表达式(Conditional Expression)
- XQuery表达式之逻辑表达式(Logical Expression)
- XQuery表达式之比较表达式(Comparison Expression)
- XQuery表达式之算术表达式(Arithmetic Expression)
- XQuery表达式之FLWOR表达式(FLWOR Expression)
- XQuery表达式之序列类型表达式(Expressions on SequenceTypes)
- [LeetCode]—Simplify Path 简化路径表达式
- 正则表达式(regular expression)
- 正则表达式(regular expression)
- 正则表达式(Regular Expression)
- 正则表达式(regular expression)
- 正则表达式 regular-expression
- 正则表达式(regular expression)
- 正则表达式(regular expression)
- 为什么position都要编码?
- 请教高手,这个程序用VB怎么编,求教!!!!!!!!!!!
- Action 中返回ActionMessages
- 解决Office 2003 Word无法正常启动
- 快速搭建自己的CVS
- XQuery表达式之路径表达式(Path Expression)
- 应用ORACLE的时候可能会遇到很多看起来不难的问题
- 有感
- Linux发行版
- 头文件知识 [转]
- SourceSafe下代码的迁移
- 关于使用 session_start 出现的 Warning: session_start(): Cannot send sessioncache limiter - 问题的解决
- 程序员4大忌
- 我的程序生涯之感想