Xml 如何在xquery中使用计数器?
我在exist db中使用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
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&BookID=106201&PageIndex={$P}&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&BookID=106201&PageIndex={$P}&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&BookID=106201&PageIndex={$P}&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&BookID=106201&PageIndex={$P}&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&BookID=106201&PageIndex={$P}&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&BookID=106201&PageIndex={$P}&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&BookID=106201&PageIndex={$P}&Language=1#p{$key - 2+$P}">{$result}</a>