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

2024-02-25 03:48

本文主要是介绍XQuery表达式之路径表达式(Path Expression),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[如需转载,请注明出处]

路径表达式其实就是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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744298

相关文章

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl