2011-09-06 23 views
1

我得到了下面的示例XML:xQuery和撒克逊。对于参数的每个值一个新的标签

<meci> 
    <nodes> 
    <node id="x"> 
     <mlfbs> 
     <region value="H"> 
      <mlfblist> 
      <mlfb partno="1" masternode="false" /> 
      <mlfb partno="2" masternode="false" /> 
      </mlfblist> 
     </region> 
     </mlfbs> 
    </node> 
    </nodes> 
</meci 

我写了下面的XQuery:

xquery version "1.0"; 
<ProductList> 
{  
    for $a in /meci/nodes/node 
    return 
    <Product> 
    <id>{data($a/@id)}</id> 
    <mflb>{data($a/mlfbs/region/mlfblist/mlfb/@partno)}</mflb> 
    </Product> 
} 
</ProductList> 

结果看起来像

<ProductList> 
    <Product> 
    <id>x</id> 
    <mflb>1 2</mflb> 
    </Product> 
</ProductList> 

但是我想得到以下结果:

<ProductList> 
    <Product> 
    <id>x</id> 
    <mflb>1</mflb> 
    <mflb>2</mflb> 
    </Product> 
</ProductList> 

任何人都可以请告诉我做错了什么?任何帮助将不胜感激,我一直在搜索小时,没有解决方案:/。

干杯 斯特凡

回答

1

使用一个更for获得mflb列表:

<ProductList> 
{  
    for $a in /meci/nodes/node 
    return 
    <Product> 
    <id>{data($a/@id)}</id> 
    {for $mlfb in data($a/mlfbs/region/mlfblist/mlfb/@partno) 
    return <mflb>{$mlfb}</mflb>} 
    </Product> 
} 
</ProductList>