2013-09-13 4 views
2

У меня есть следующий xml.Узлы zip xml с использованием xquery?

declare @x xml = ' 
<Cols> 
    <Col><Name>A</Name></Col> 
    <Col><Name>B</Name></Col> 
    <Col><Name>C</Name></Col> 
    <Col><Name>D</Name></Col> 
</Cols> 
<Values> 
    <A>1</A> 
    <B>2</B> 
    <C>3</C> 
    <D>4</D> 
</Values> 
'; 

Как написать select @x.query('......'), чтобы преобразовать его в

<Cols> 
    <Col><Name>A</Name><Value>1</Value></Col> 
    <Col><Name>B</Name><Value>2</Value></Col> 
    <Col><Name>C</Name><Value>3</Value></Col> 
    <Col><Name>D</Name><Value>4</Value></Col> 
</Cols> 

ответ

2

Кажется следующее делать то, что вам нужно:

select @x.query(' 
    element Cols { 
     for $c in /Cols/Col 
     return 
      <Col> 
      { $c/Name } 
      { element Value { text {/Values/*[local-name()=$c/Name/text()[1]]} } } 
      </Col> 
    } 
    '); 
2

Нет необходимости в отношении имен столбцов вообще, все, что нам нужно содержится в <Values/>:

for $value in //Values/* 
return element Col { 
    element Name { local-name($value) }, 
    element Value { $value/node() } 
} 
Смежные вопросы