无法在XQuery MarkLogic中写入for循环

无法在XQuery MarkLogic中写入for循环,xquery,marklogic,Xquery,Marklogic,我正在尝试编写一个for循环,如下所示: for $conditions in $contents return fn:concat("The value of contents is : ", $conditions) 但是,它将返回$contents变量中的值以代替页面 我正在marklogic中处理一个映射文件,并试图从该映射文件中获取元素的值 "contents": { "sample": { &q

我正在尝试编写一个for循环,如下所示:

for $conditions in $contents
return fn:concat("The value of contents is : ", $conditions)
但是,它将返回
$contents
变量中的值以代替页面

我正在marklogic中处理一个映射文件,并试图从该映射文件中获取元素的值

"contents": {
      "sample": {
        "feature": ".........",
        "contents": "value1",
        "contents": {..................}
现在我想循环映射文件中的“contents”元素,但是我的for循环返回整个“contents”映射,而不是输出为:“contents的值为:value1”
在这方面有人能帮忙吗?

你的问题不太清楚,其他人也提到过,但让我冒昧猜测一下。你有时想数一数物品。你可以用像
fn:count($books)
这样简单的方法来完成

在其他情况下,您可能希望跟踪当前的项目编号。在其他编程语言中,您可以编写一个for循环,用
i=i+1
递增变量。在XQuery中不能这样做,因为它是一种函数式语言,而这些语言通常不允许这样做

MarkLogic有很多方法,但有一个简单的技巧。FLWOR语句可以使用
at
关键字为您跟踪当前位置

您可以这样使用它:

for $item at $page in $books
return fn:concat("This is the page number... ", $page)

您需要了解$books包含的内容。for子句在序列上迭代。如果$books不包含序列,这将是预期的行为。请提供足够的信息以便重现问题:一个样本源文档和一个完整的查询;显示所需的输出和实际输出。当您说“$books变量中的值”时,可能发生的情况是您给它一个可能具有XML结构的$book,并且当在函数中使用它时,例如
fn:contains()
它会生成该book的字符串值,这将是所有
text()
节点的串联。如果您提供一个$books的示例、它当前作为输出生成的内容以及您希望它生成的内容,这会很有帮助。可能您需要调整XPath以选择
$books
下的页面,但是除非我们能够看到
$books
是什么,否则很难判断。这只是给出了计数。我想在页面内的值。你能详细说明一下$books的内容吗?你的问题很短。你能编辑它,并提供更多细节吗?