问题标签 [flwor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xml-parsing - 具有多个 for 循环的 XQuery FLWOR 表达式返回意外的空标签
这是我的问题的简短版本。
在 FLOWR 表达式中使用嵌套 for 循环时,从内部循环返回变量的行为与预期相同,但从外部循环返回变量意外返回空标记。
这是我的问题的更长版本。
我最近开始学习 XQuery。我一直在 Mac OS X 10.10.4 (Yosemite) 上使用 XQilla 命令行工具来执行我的 XQuery 脚本。特别是我尝试了使用 MacPorts 包管理器安装的 XQilla 版本 2.3.0_2 以及我从源代码手动安装的 XQilla 版本 2.3.2。
在尝试各种 XPath 和 FLWOR 表达式时,我遇到了一个意想不到的行为,我已将其范围缩小到我将在此处介绍的简化示例。该示例由一个 XML 数据文件和两个版本的简单 XQuery 组成;第一个查询按预期工作,但第二个查询没有。
这是我的 XML 数据文件 ( test.xml
):
这是我的第一个 XQuery 脚本 ( test_1.xq
):
这是我的第二个 XQuery 脚本 ( test_2.xq
):
两个查询都包含相同的冗余嵌套 for 循环,但第一个查询从外部(即第一个)for 循环返回变量,第二个查询从内部(即第二个)for 循环返回变量。我预计这两个查询通常具有相似的输出,并且此特定数据文件的输出相同,但情况似乎并非如此。
这是一个示例 shell 会话:
所以从外循环返回变量只会产生空标签;这是出乎意料的。
作为健全性检查,我尝试了第三种变体(test_3.xq
):
当我执行第三个查询时,我得到:
我原本希望这个查询能够正常工作,但鉴于test_2.xq
我认为这test_3.xq
也会失败的意外行为。这只会增加我的困惑。
xml - 返回多个节点时,FLWOR 表达式中出现“noteLine 未定义变量”错误
我对 FLWOR 循环有一个非常奇怪的问题,它以一种方式工作,但不是另一种方式。目标是获取任意长度的字符串,并将其分解为每个只能容纳 80 个字符的 XML 节点。所以,首先,这很好用:
所以,我觉得这不是很优雅。我尝试通过将第一个元素移出 if 来清理它,因为它应该总是被使用,对吧?那样代码少吗?所以这是我尝试过的:
解析器现在告诉我“noteLine 处的未定义变量”指向第一个“if”行。我在这里想念什么?(请注意,是的,我确实有其他关于如何清理它的想法,但这是第一个简单的步骤,当它惨遭失败时,我惊慌失措)。
解决方案(感谢 Jens Erat) 返回块需要用括号括起来,以强制它在 flwor 循环的每次迭代中完全评估。因此:
xml - XQuery FLWOR 返回带有多个 if 语句的部分代码内容
我正在尝试清理一些 XQuery 代码并遇到另一个问题(最后一个问题是这个问题:Error "undefined variable at noteLine" in FLWOR expression when return multiple nodes)。我正在进一步清理以下工作代码,以尽量减少重用:
现在我将第一个 NTE 移出,我想对其余的基本上做同样的事情(运行一个 IF,只使用所需的代码输出另一个)所以我描绘了一个这样的解决方案:
这在解析器中失败,错误“Unexpected Token: ' (fn:string-len...'”指向第二个 if 语句。我的结论是 XQuery 不喜欢重复 if 部分,除非它们在一个节点内,比如这:
这是行不通的,因为如果这些额外的节点为空,我不能让任何额外的节点进入输出。XQuery 中有没有办法以类似的方式实现所需的输出(我通过将一些代码放入本地函数中找到了解决方案,但它不像 imo 那样可读)?并且可能作为后续,为什么 XQuery 对多个连续的 if 语句如此敏感?
解决方案(再次感谢 Jens Erat)
(注意:逗号放置在返回的前两个“部分”之后,第一个 NTE 节点和 if 语句之后,而不是在 if 语句中)。
if-statement - 不完整的 FLWOR 表达式:期待“返回”
我在使用 XQuery 的 if-then-else 命令时遇到了一些问题。
目前我正在使用 BaseX 来编辑 XQuery(如果这很重要!)
这篇文章抛出一个错误说:[XPST0003] 不完整的 FLWOR 表达式:期待“返回”。
xml - XQuery:创建一个新序列并返回它
我想要实现的是将值添加$stationsSequence
到新序列中,$newSequence
然后distinct-values
在序列中返回。我“天真地”尝试使用这样的 if 语句来做到这一点:
这样做的正确方法是什么?谢谢
xml - 使用多个节点检索数据时避免使用 Xquery 进行 xml 排列
我想知道是否有人可以帮助我。我的问题是我目前正在使用具有 XQuery 编辑器的 BaseX。我遇到的问题是我有大量的 XML,我想减少它们。然而,一些信息在不同的节点上,当我尝试检索它们时,它们会被排列。
我用来检索数据的代码是:
现在我期望它在我拥有的包中为每个 XML 返回两组,所以我会在这里有 2k。尽管如此,我还是收到了 200k 套,因为它以每种可能的方式将每个 $z 与每个 $x 和每个 $y 混合在一起。我希望它尊重每个 XML,如果它从 XML 中获取数据,那么所有其他数据必须来自同一个 XML。
我希望我说得足够清楚,谢谢你的帮助。
xquery - 无法理解结合插入和返回语句的 FLWOR 表达式
在 BaseX 7.7.2 中使用 XQuery,我想用一些变量值填充模板节点并将其插入到文档中,并且只返回新创建的节点,而不是我插入的上下文节点。
这行得通。但是,我不希望它返回/companies
,而只是返回新的 node $company
。
但是,如果我将查询更改为以下内容,它将不再起作用。
为什么我不允许在 FLWOR 语句中在返回某些内容之前执行中间更新操作?为什么在 FLWOR 表达式中必须使用 return 语句?
编辑:
在查看此XQuery 语法文档后,似乎我根本不应该使用 FLWOR 表达式开始,而只是使用declare variable
语句而不是let
语句。但是,在那种情况下,我仍然不知道如何返回新创建的节点,如果完全可以在不使用 FLWOR 表达式的情况下显式返回某些内容的话。
默认情况下,似乎任何更新语句(无论有或没有 FLWOR)都会简单地返回完整的文档作为结果。由于我预计此文档在某些时候可能会变得非常大,因此我不希望通过网络将其与每个更新语句一起发送。
如您所知,我有点难以理解 XQuery 语言中的更新/返回概念。我希望有人可以对这些问题有所了解。
xml - 在 BaseX 中从 XQuery 将 xml 转换为 csv
我写这篇文章的原因是因为我在 BaseX 中有一个大约 1k 的 xml 数据库。我已经清理了它并得到了我想要的信息。不过,我希望能够以 CSV 格式导出该数据。当我尝试使用 BaseX 文档中给出的代码时,它给了我这个:
它应该显示逗号之间的数据。我要问的是我应该如何修改我的代码才能显示数据。
我的代码如下:
xml - 使用 FLWOR 从选定节点中删除 xml 子元素
我正在尝试使用 flwor 查询从下面的“应用程序”节点中删除“数字”子元素:@tsip:form="wila"。数据位于 Oracle 11g 数据库中,在 xml_type 列中,Oracle 使用 xquery 1.0。我已经设法在下面完成了这一点,但我的尝试非常笨拙且冗长,因为我已经硬编码了父“应用程序”元素和子“数字”元素之间的中间元素,所以如果 xml 的格式改变了我的查询可能不起作用。谁能提供更通用的解决方案。它一定比这更容易:
创建表:
在 XML_DOCUMENT_TMP 中插入一些数据:
使用@tsip:form="wila" 选择除“数字”元素之外的所有数据
sql - 在 Oracle XMLQuery 中组合“转换”和 FLWOR 表达式
在下面的代码中,我尝试将 oldXml2 中的“name”元素插入 oldXml,并将 oldXml 中的“test”属性值更新为“newTest”,结果组合输出为 newXml。代码成功更改了属性值,但是,当我添加:
从 oldXml2 获取名称元素的子句停止工作。有没有人可以解决这个问题?
我正在使用 Oracle 11g,它使用 xquery 1.0。
newXml 中所需的输出是: