5

在一个 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 的每个值一起输出?

4

2 回答 2

3

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

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

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

于 2012-09-16T21:59:25.480 回答
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
于 2012-09-16T22:04:20.487 回答