[英]xquery - function tokenize for regular expression
我用正則表達式修改了我的代碼但是我遇到了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
(無空間)。 有什么麻煩? 謝謝你的幫助。
Tokenize可能很有用,但需要一次應用於單個值。 不確定為什么eXistDB似乎在輸出之前將數據轉換為數字。 在你的情況下,你真的不需要令牌化。 舊的逐字符替換函數fn:translate()
也會這樣做。 如果你想確保結果是空格分隔的,請嘗試將for包裝在fn:string-join()
:
fn:string-join(
for $a in $snapshot/EV/accoppiamenti//accoppiamento/@specie
return
fn:translate($a,"e", ""),
" ")
如果你想顛倒事物的順序,只需在字符串加入所有內容之前將for包裝在fn:reverse()
。 如果要分別迭代每個EV中的specie屬性,可以嵌套for循環。
HTH!
如果你想堅持使用fn:tokenize(...)
(盡管@ grtjn的答案可能會更有效),你需要將函數應用於每個元素,例如在節點步驟中:
for $ev in $snapshot/EV
return $ev/accoppiamenti//accoppiamento/fn:tokenize(@specie,"e")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.