我在exists-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&BookID=106201&PageIndex={$P}&Language=1#p0">{$result}</a>
我需要在Language=1#p
之后计数器变量。例如:
Language=1#p0">
Language=1#p1">
Language=1#p2">
我写下这些代码:
declare function local:prod2ndDigit() {
for $x in (0 to 10)
return <counter>{$x}</counter>
};
local:prod2ndDigit()
此代码有效,但存在逻辑错误。 我的其他代码是:
declare function local:prod2ndDigit() {
declare variable $C := 0
return $C := $C + 1
};
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>
但是这段代码似乎有一个逻辑错误。
我编写此代码但它返回false
而不是整数:
let $C := 0
return
$C = $C + 1
答案 0 :(得分:3)
您使用的逻辑不适用于像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()
没有。
代码let $C := 0 return $C = $C + 1
返回false
是正确的。您使用的是=
运算符,它在XQuery中的含义相同。您可能打算编写一个赋值,其运算符为:=
。此外,似乎你想增加柜台。请记住,XQuery是一种函数式语言,正如我之前所说,所以你可以永远不会操作变量你总是会创建一个新的$counter
变量并遮蔽旧值,但你可以不像在C,Java,Python等其他语言中那样更改变量,等等。
我不知道你希望用你的函数local:prod2ndDigit()
实现什么。它返回一系列项目,但我在这里看不到用例。
答案 1 :(得分:0)
谢谢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>