xquery-如何在for循环中递增计数器变量/如何将字符串值数组转换为节点

时间:2012-09-16 21:11:07

标签: xquery

在java程序中,我使用Saxon Library来解析一些XQuery命令。

现在,首先我使用tokenize()将一些文本拆分为多个文本值。 文本的一个例子是 -

Mohan Prakash, Ramesh Saini

我在上面的文本上使用了tokenize(),并使用','作为分隔符。并将tokenize的结果存储在变量$ var

在此之后,我想循环遍历这些文本值,并将以下内容作为输出 -

  Mohan Prakash,1
  Ramesh Saini,2

从上面可以看出,每行的最后一个值是第一行的计数器,该值为1,第二行的值为2,依此类推......

我想过使用类似下面的代码 -

for $t in $var/position()
return concat($var[$t], ',', $t)

但是我收到一个错误,我不能在$ var上使用position(),因为$ var应该是一个节点。

所以有两种方法可以解决这个问题 -

(a)将$ var中的值转换为节点

   I tried text{$var} but that is not giving accurate results.

如何将值数组转换为节点?

(b)使用以下内容 -

      for $t in $var

在这里,如何在for循环中创建和使用计数器,以便计数值可以与$ t的每个值一起输出?

2 个答案:

答案 0 :(得分:2)

您可以在at子句中使用for关键字:

let $var := tokenize('Mohan Prakash, Ramesh Saini', ', ')
for $t at $pos in $var
return concat($t, ',', $pos)

这将返回两个字符串Mohan Prakash,1Ramesh Saini,2

答案 1 :(得分:1)

此XQuery (也恰好是XPath 2.0表达式):

for $text in 'Mohan Prakash, Ramesh Saini',
    $i in 1 to count(tokenize($text, ','))
        return concat(tokenize($text, ',')[$i], ',', $i, '
')

会产生想要的正确结果:

Mohan Prakash,1
Ramesh Saini,2