在XQUERY中连接序列和文档

时间:2016-04-28 14:51:54

标签: xquery

我想在XQUERY中加入文档和序列。 我正在尝试这段代码:

let $in_xml :=
 <ss>
  <s>
   <p>2016/2/18/11/protocol13818.xml</p>
   <n>service1_1</n>
   <d>2016-04-01</d>  
  </s> 
  <s>
   <p>2016/2/18/15/protocol13819.xml</p>
   <n>service_2</n>
   <d>2016-04-02</d>
  </s>     
 </ss>

for $a in /version,
    $i in $in_xml
where $a/fn:base-uri() = $i/s/p

return <a>{$a//id/value/text(),"    ", $i//n}</a>

得到这个结果:

<a>c2e9bb01-acc1-4a64-b39b-f30ef514c5ec    <n>service1_1</n>
  <n>service_2</n>
</a>
<a>50543b71-48b8-41f6-956e-b444c5ad0abe    <n>service1_1</n>
  <n>service_2</n>
</a>

为什么不过滤序列? 我想,结果将如下所示:

<a>c2e9bb01-acc1-4a64-b39b-f30ef514c5ec    <n>service1_1</n>
</a>
<a>50543b71-48b8-41f6-956e-b444c5ad0abe    <n>service1_2</n>
</a>

我该怎么做?有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

执行$i in $in_xml时,您遍历$in_xml中的每个元素,这只是$in_xml本身,因为它是元素而不是序列。要迭代$in_xml的所有子项,您需要选择它们:

你想要像

这样的东西
for $a in /version,
    $i in $in_xml/s
where $a/fn:base-uri() = $i/p

return <a>{$a//id/value/text(),"    ", $i/n}</a>