簡體   English   中英

xquery - 用於正則表達式的函數tokenize

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM