Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在xquery中使用计数器?_Xml_Xquery_Exist Db - Fatal编程技术网

Xml 如何在xquery中使用计数器?

Xml 如何在xquery中使用计数器?,xml,xquery,exist-db,Xml,Xquery,Exist Db,我在exist db中使用XQuery,我想使用计数器。例如,我有以下代码: xquery version "3.0"; for $P in 1 to 351 let $S := data(doc(concat('/db/INDEX/' , $P , '.html'))//h1) for $result in $S return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid

我在exist db中使用XQuery,我想使用计数器。例如,我有以下代码:

xquery version "3.0";
for $P in 1 to 351
  let $S := data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
    for $result in $S
     return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#p0">{$result}</a>
我写这段代码:

declare function local:prod2ndDigit() {
    for $x in (0 to 10)
        return <counter>{$x}</counter>
};
local:prod2ndDigit()
此代码不起作用

最后的代码是:

declare function local:prod2ndDigit() {
    for $x in (0 to 10)
        return <counter>{$x}</counter>
};

for $P in 1 to 351
  let $S := data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
    for $result in $S
     return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#plocal:prod2ndDigit()">{$result}</a>

您使用的逻辑不适用于XQuery之类的函数式编程语言。我猜您希望迭代每个h1元素,并希望包含一个递增计数器。这实际上比你想象的还要简单:

for $result at $key in data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#p{$key - 1}">{$result}</a>
at$key语句提供您所需的位置,即计数器。看起来您希望从0开始,但在XQuery序列中总是从位置1开始,因此我们使用-1

您的代码中还有一些其他错误。您必须将XQuery函数调用或变量放在花括号中,就像您为$P所做的那样,但不必为local:prod2ndDigit

让$C:=0返回$C=$C+1的代码返回false是正确的。您正在使用=运算符,这在XQuery中确实意味着相等。您可能打算编写一个赋值,其运算符为:=。而且,你似乎想增加计数器。请记住,正如我前面所说的,XQuery是一种函数式语言,因此您永远不能操作一个变量—您将始终创建一个新的$counter变量并隐藏旧值,但您不能像在其他语言(如C、Java、Python等)中那样更改该变量


我不知道您想用local:prod2ndDigit函数实现什么。它返回一个项目序列,但我看不到这里的用例。

您使用的逻辑不适用于像XQuery这样的函数式编程语言。我猜您希望迭代每个h1元素,并希望包含一个递增计数器。这实际上比你想象的还要简单:

for $result at $key in data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#p{$key - 1}">{$result}</a>
at$key语句提供您所需的位置,即计数器。看起来您希望从0开始,但在XQuery序列中总是从位置1开始,因此我们使用-1

您的代码中还有一些其他错误。您必须将XQuery函数调用或变量放在花括号中,就像您为$P所做的那样,但不必为local:prod2ndDigit

让$C:=0返回$C=$C+1的代码返回false是正确的。您正在使用=运算符,这在XQuery中确实意味着相等。您可能打算编写一个赋值,其运算符为:=。而且,你似乎想增加计数器。请记住,正如我前面所说的,XQuery是一种函数式语言,因此您永远不能操作一个变量—您将始终创建一个新的$counter变量并隐藏旧值,但您不能像在其他语言(如C、Java、Python等)中那样更改该变量


我不知道您想用local:prod2ndDigit函数实现什么。它返回一系列项目,但我在这里看不到用例。

谢谢dirkk。我操纵你的答案并得到正确的答案: 非常非常感谢

xquery version "3.0";
for $P in 1 to 351
for $result at $key in data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#p{$key - 2+$P}">{$result}</a>

谢谢你,德克。我操纵你的答案并得到正确的答案: 非常非常感谢

xquery version "3.0";
for $P in 1 to 351
for $result at $key in data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#p{$key - 2+$P}">{$result}</a>

你到底想要什么?从你的问题来看,这很不清楚。这将返回一个元素,就像您在上面为文档中的每个h1元素给出的一样。能否请您用一些预期的输出和相同的示例输入文档来扩展您的问题?否则很难猜出你想要什么-我试着猜,但似乎它不是你想要的。我需要列举h1并写出前面的数字P。你绝对需要更好地描述你的问题。您现在所说的正是我的代码所做的,所以您似乎想要一些不同的东西。请为一些示例输入提供具体的示例输出!你到底想要什么?从你的问题来看,这很不清楚。这将返回一个元素,就像您在上面为文档中的每个h1元素给出的一样。能否请您用一些预期的输出和相同的示例输入文档来扩展您的问题?否则很难猜出你想要什么-我试着猜,但似乎它不是你想要的。我需要列举h1并写出前面的数字P。你绝对需要更好地描述你的问题。您现在所说的正是我的代码所做的,所以您似乎想要一些不同的东西。请为一些示例输入提供具体的示例输出!
xquery version "3.0";
for $P in 1 to 351
for $result at $key in data(doc(concat('/db/INDEX/' , $P , '.html'))//h1)
return <a class="libraryIndexlink" href="http://library.net/newindex.aspx?pid=102834&amp;BookID=106201&amp;PageIndex={$P}&amp;Language=1#p{$key - 2+$P}">{$result}</a>