首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在XQuery中更新计数器

在XQuery中更新计数器
EN

Stack Overflow用户
提问于 2012-04-24 08:53:04
回答 7查看 12.9K关注 0票数 13

我想在xquery中创建一个计数器。我最初的尝试如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let $count := 0
for $prod in $collection
let $count := $count + 1
return 
<counter>{$count }</counter>

预期结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<counter>1</counter>
<counter>2</counter>  
<counter>3</counter>

实际结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<counter>1</counter>
<counter>1</counter>  
<counter>1</counter>

$count变量无法更新或被重置。为什么我不能重新赋值现有的变量?什么是获得预期结果的更好方法?

EN

回答 7

Stack Overflow用户

发布于 2012-04-24 09:29:28

尝试使用‘at’中的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for $d at $p in $collection
return 
element counter { $p }

这将为您提供每个“$d”的位置。如果您想将它与order by子句一起使用,这将不起作用,因为位置是基于初始顺序的,而不是基于排序结果的。要解决这个问题,只需将FLWOR表达式的排序结果保存在一个变量中,并在第二个FLWOR中使用at子句,该子句只迭代第一个排序结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let $sortResult := for $item in $collection
                   order by $item/id
                   return $item

for $sortItem at $position in $sortResult
return <item position="{$position}"> ... </item>
票数 22
EN

Stack Overflow用户

发布于 2012-04-24 10:01:27

正如@Ranon所说,所有的XQuery值都是不可变的,所以你不能更新一个变量。但是如果你真的需要一个可更新的数字(不应该太频繁),你可以使用递归:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare function local:loop($seq, $count) {
  if(empty($seq)) then ()
  else
    let $prod  := $seq[1],
        $count := $count + 1
    return (
      <count>{ $count }</count>,
      local:loop($seq[position() > 1], $count)
    )
};

local:loop($collection, 0)

这完全符合您对示例的预期。

在XQuery 3.0中,该函数的一个更通用的版本甚至在标准库中定义:fn:fold-right($f, $zero, $seq)

也就是说,在您的示例中,您绝对应该使用at $count,如@tohuwawohu所示。

票数 9
EN

Stack Overflow用户

发布于 2012-04-24 09:16:49

不可变变量

XQuery是一个functional programming language,它涉及不可变变量,因此您的不能更改变量的值。另一方面,您可以使用强大的函数集合,这解决了许多日常编程问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let $count := 0
for $prod in $collection]
  let $count := $count + 1
return 
<counter>{$count }</counter>

第1行中的let $count在所有作用域中定义了这个变量,在本例中,所有作用域都在后面。第3行中的let $count定义了一个新的$count,它是0+1,在此代码块中的所有后续行中都有效-这是没有定义的。因此,您确实将$count递增了三次,但是立即丢弃了结果。

BaseX的查询信息显示了该查询的优化版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for $prod in $collection
  return element { "counter" } { 1 }

解决方案

要获得$collection中的元素总数,您可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return count($collection)

有关XQuery函数的列表,您可以查看XQuery part of functx,其中既包含XQuery函数的列表,也包含一些可以作为模块包含的其他有用的函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10294677

复制
相关文章
[译] 在Kubernetes生产环境中运行Istio
本文翻译自 https://www.tigera.io/blog/running-istio-on-kubernetes-in-production-part-i/,作者 Alexander Lukyanchenko,发表于2019年5月。
SammyLiu
2020/02/25
1.5K0
在VSCode中配置python运行环境
使用Visual Studio Code来写Python,你将体验到丝滑的编程体验和无限扩展的可能。而且,如果你的项目是包含多种语言的,比如Web开发,你不必再开多个编辑器和其他工具,因为这一切都可以在VSCode里完成了。下面说说具体操作。
fem178
2018/07/25
25.7K0
在VSCode中配置python运行环境
ubuntu 安装 Ruby, Rails 运行环境
或者可以安装 1.8.7 版本,也可以是 1.9.3,只要将后面的版本号跟换一下就可以了 同样继续等待漫长的下载,编译过程,完成以后,Ruby, Ruby Gems 就安装好了。 步骤3 - 设置 Ruby 版本
零式的天空
2022/03/02
1.7K0
在mac上配置rails开发环境
  首先,安装home-brew,并且升级到最新的版本,值得一提的是home-brew个人感觉比port要好用,安装软件也方便一点。
用户9127725
2022/08/08
1.3K0
在 WSL 2 中基于 Docker 编排 LNMP 运行环境
上篇教程学院君给大家演示了如何在 Windows 中安装 WSL 版 Ubuntu 虚拟机,并且在虚拟机中安装了 PHP、Composer、Git 等 PHP 开发基础软件,此外还简单介绍了 WSL 虚拟机与 Windows 宿主机之间的文件同步机制。
学院君
2020/07/21
6.9K0
在 WSL 2 中基于 Docker 编排 LNMP 运行环境
Kubernetes在ShareThis生产环境中的实践
ShareThis从一个小插件起家,发展至今每月服务的网站超过450万家,为网站内容的发布者提供了高品质的服务。 快速发展是有代价的。ShareThis在扩张的过程中积累了技术负债,在基础设施方面的负债尤为突出。随着公司规模的进一步扩大,基础设施的开销因为人员和设备利用率低下的原因暴涨。一年前已经到了不得不变的地步。 Kubernetes是我们减轻基础设施负债的关键,它的作用主要体现在下面几个方面: 促进Docker的使用 简化容器管理 转化基础设施人才 实现持续集成与交付 除了Kubernetes的使用我
Rainbond开源
2018/05/31
1K0
react获取运行环境是开发还是生产环境。
import getConfig from '../../../../env.js' // 接口前缀 let phoneApi; // 接口地址获取 if (process.env.NODE_ENV == "development") { phoneApi = getConfig.development.PHONE_API; } else { phoneApi = getConfig.production.PHONE_API; } env.js文件内容 module.exports = {
用户4344670
2020/08/22
1.9K0
pm2:在生产环境中运行 nodejs 应用
如果你用朴实无华的 node 命令去运行 nodejs 应用,那它是不稳定的,运行一段时间就会挂掉,不适合用在生产环境。
前端西瓜哥
2022/12/21
1.1K0
pm2:在生产环境中运行 nodejs 应用
MySQL在Docker环境下运行基础
墨墨导读:MySQL在Docker环境下运行的基础操作,本文从Docker介绍、安装Docker、MySQL安装部署几个方面展开介绍。
数据和云
2020/09/04
1.2K0
在alpine中运行mysql
搬瓦工的1G内存,想要跑一个MySQL服务,动辄500M内存就没了,剩下一半的内存让我感觉很虚,于是想把是不是把MySQL塞进alpine镜像中看看,结果一搜,果然已经有大神这样做了,使用的是MariaDB,测试下来,同样跑一个博客只需要50M内存就OK,简直完美!
老高的技术博客
2022/12/28
3.7K0
在kubernetes中运行openebs
现在,OpenEBS是kubernetes下与容器原生和容器附加存储类型相关通用的领先开源项目之一。通过为每个工作负载指定专用的存储控制器,OpenEBS遵循容器附加存储或CAS的脚步。为了向用户提供更多功能,OpenEBS具有精细的存储策略和隔离功能, 可帮助用户根据工作负载选择存储。该项目不依赖Linux内核模块,而是在用户空间中运行。它属于Cloud Native Computing Foundation沙箱,在各种情况下都非常有用,例如在公共云中运行的群集, 在隔离环境中运行的无间隙群集以及本地群集。
有点技术
2020/07/13
4.8K0
在kubernetes中运行openebs
在 Kubernetes 中运行 Kubernetes
前面其实我们在 Windows 系统的 WSL2 下面使用 KinD 搭建了一套 Kubernetes 集群,KinD 是一个非常轻量级的 Kubernetes 安装工具,他将 Docker 容器当成 Kubernetes 的节点,使用非常方便。既然在 Docker 容器中可以运行 Kubernetes 集群,那么我们自然就会想到是否可以在 Pod 中来运行呢?在 Pod 中运行会遇到哪些问题呢?
我是阳明
2020/06/19
2.9K0
在 Kubernetes 中运行 Kubernetes
在 SCF 中运行 Puppeteer
Puppeteer 是一个 Node.js 库, 提供了一组封装良好的接口, 使你可以通过 DevTools 协议控制 Chrome. 本文介绍如何在 SCF 中使用 Puppeteer.
ritchiechen
2019/04/05
6.7K10
在 SCF 中运行 Puppeteer
在vscode中配置R的开发环境
有时候各位使用R的用户不知道会不会有这样的感觉,visual studio和Rstudio由于负载过重,在打开或者加载R script时会出现加载过慢的情况,但对于很多数据工作者来说,variable inspector和data view这类的数据可视化功能必不可少,而visual studio和Rstudio在这方面做得可以说是非常完善。在这时候笔者就想到了visual studio code,毕竟作为宇宙最强IDE的减配和开源版本(这里形容可能不太准确),各种语言相应的开发插件众多。更加让笔者惊喜的是,目前vscode-R一直处于开发阶段,并且在最近的1.2.0版本结合了vscode关于web view的API,添加了R session watcher——一个集成的数据可视化构架,并且在1.21中完善了windows系统下的extension的bug。我们来看看集成的viewer会有什么样的效果:
用户7652506
2020/08/12
11.8K0
在vscode中配置R的开发环境
在VSCode中配置PHP开发环境
XAMPP 是一个易于安装的 Apache 发行版,下载并安装好就行了。当然也可以用 phpstudy。
字节星球Henry
2021/08/09
5.2K0
在Atom中设置Python开发环境
当然,网络上有很多很棒的文本编辑器。Sublime Text,Bracket,Atom等。就我个人而言,我一直都是Atom的粉丝,因为它是完全免费的,并且它有很多可用的包和主题,这些包和主题使编码变得更容易一些。在这里,我将介绍如何使用Atom来建立一个“Python友好”的开发环境,我将提到一些对python编码有用的软件包,然后看看如何编写一些基本代码。
teachertian
2018/03/13
4.9K0
在Atom中设置Python开发环境
在Atom中配置Python开发环境
当然,这里有很多很棒的文本编辑器。例如Sublime Text, Brackets, Atom。我一直都是Atom的粉丝,因为它是完全免费的,而且它有很多可用的包和主题,使得编码更容易一些。在这里,我将介绍如何使用Atom配置一个“Python友好”的开发环境、一些对python编码有用的软件包,然后看看如何编写一些基本代码。
赵康
2018/03/09
2.8K0
在IDEA中配置Maven开发环境
环境说明: 系统:win10专业版 deepin V20 IDE:IDEA 2020.3 java:jdk1.8 Maven:3.8.1
知识分子没文化
2023/07/01
6740
在IDEA中配置Maven开发环境
在Atom中设置Python开发环境
当然,这里有很多很棒的文本编辑器。Sublime Text,Brackets,Atom。我一直都是Atom的粉丝,因为它是完全免费的,它有很多可用的包和主题,使编码更容易一些。在这里,我将介绍如何使用Atom设置一个“友好的Python”的开发环境,一些对python编码有用的软件包,然后看看如何编写一些基本代码。
anthlu
2018/03/08
2.1K0
在Atom中设置Python开发环境
点击加载更多

相似问题

Rails 4: Capistrano开发环境而不是生产环境?

15

在Rails生产环境中运行Thor

11

Grails 3:集成测试在开发环境中运行,而不是在测试环境中运行。

13

在Rails中运行远程开发环境

30

django覆盖管理在本地运行,而不是在生产环境中运行

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文