在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的每个值一起输出?
答案 0 :(得分:2)
您可以在at
子句中使用for
关键字:
let $var := tokenize('Mohan Prakash, Ramesh Saini', ', ')
for $t at $pos in $var
return concat($t, ',', $pos)
这将返回两个字符串Mohan Prakash,1
和Ramesh 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