Xquery - 并行地走两个序列

时间:2014-12-04 16:10:57

标签: xml xquery tokenize osb

我试图将2个字符串的结果从:

<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>

我可以将每个字符串标记为分隔每个值,但我有一个问题,然后结合结果

,string1中的第一个结果需要与string2中的第一个结果配对,string2中的第二个结果需要与字符串2中的第二个结果配对,依此类推。 任何帮助将不胜感激

1 个答案:

答案 0 :(得分: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,而不是{{1}因为我无法认真对待那部分问题描述。如果你还没有能够分辨序列中第一个value1元素与第三个元素之间没有名称告诉你它在哪里,那么花一些时间来获得这种能力是值得的。 / p>