2014-12-04 24 views
-1

我試圖把2串從結果:的Xquery - 在行走兩個序列並行

<string1>A,B,C</string1> 
<string2>1,2,3</string2> 

<result1> 
    <value1>A</value1> 
    <value1>1</value1> 
</result1> 

<result2> 
    <value1>B</value1> 
    <value1>2</value1> 
</result2> 

<result3> 
    <value1>C</value1> 
    <value1>3</value1> 
</result3> 

我可以標記化每個字符串到每個值分開但是我有問題,然後結合結果

即ie中的第一個結果需要與string2中的第一個結果配對,string2中的第二個結果需要與str中的第二個結果配對2等等。 任何幫助將不勝感激

+2

如果您想獲得有用的答案,請確保您的輸入和輸出至少是格式良好的XML。作爲示例,無法關閉。 – 2014-12-04 16:23:46

回答

1

基本的方法是一起走過兩個令牌序列。例如:

let $string1 := <string1>A,B,C</string1>, 
    $string2 := <string2>1,2,3</string2> 

let $letters := tokenize($string1, ','), 
    $numbers := tokenize($string2, ',') 

return if (count($letters) ne count($numbers)) then 
    'Oops, mismatched sets of strings, please try again' 
else 
    for $s at $pos in $letters 
    return <result> 
     <value>{$letters[$pos]}</value> 
     <value>{$numbers[$pos]}</value> 
    </result> 

或者你可以制定for表達for $pos in 1 to count($letters)

注意,這些生成名爲result,不result1result2等元素全部序列,和孩子們被命名爲value,不value1,因爲我不能讓自己把問題描述的那部分嚴重。如果你還沒有能夠區分第一個result元素與第三個元素之間的區別,但是沒有名稱可以告訴你它在哪裏,那麼花一些時間來獲得這個能力是值得的。

+0

對於語法問題表示歉意,我只是在急着打字,但你的答案像魅力一樣工作。非常感謝你。 – sparkey 2014-12-05 09:49:44