我已使用正则表达式修改了我的代码,但我遇到了fn:tokenize
的问题。这是我的xml文件的一部分:
<radix>
...
<EV>
<accoppiamenti>
<accoppiamento specie="e01" />
</accoppiamenti>
</EV>
<accoppiamenti>
<accoppiamento specie="e00" />
<accoppiamento specie="e01" />
<accoppiamento specie="e02" />
</accoppiamenti>
</EV>
...
</radix>
这是我的文件xquery的一部分,其中包含tokenize:
for $ev in $snapshot/EV
let $stringa := $ev/accoppiamenti//accoppiamento/@specie
return(
fn:tokenize($stringa,"e")
)
预期输出为01 00 01 02
,但有效输出为0100
(无空格)。
有什么麻烦?谢谢你的帮助。
答案 0 :(得分:3)
Tokenize可能很有用,但需要一次应用于单个值。不确定为什么eXistDB似乎在输出之前将数据转换为数字。在你的情况下,你真的不需要令牌化。较旧的逐字符替换函数fn:translate()
也会这样做。如果您想确保结果以空格分隔,请尝试将for包装在fn:string-join()
:
fn:string-join(
for $a in $snapshot/EV/accoppiamenti//accoppiamento/@specie
return
fn:translate($a,"e", ""),
" ")
如果你想颠倒事物的顺序,只需在fn:reverse()
中包装for,然后再串联连接所有内容。如果要分别迭代每个EV中的specie属性,可以嵌套for循环。
HTH!
答案 1 :(得分:1)
如果你想坚持fn:tokenize(...)
(尽管@ grtjn的答案可能更有效),你需要将函数应用于每个元素,例如在节点步骤中:
for $ev in $snapshot/EV
return $ev/accoppiamenti//accoppiamento/fn:tokenize(@specie,"e")