2010-11-19 6 views
3

Xquery'de öğreniyorum. Bu belgeyi XML belgende var.xquery, niteliklerini etiketlere dönüştürmek için.

<element a="1" b="2" c="3" name="testgroupID">198</element> 
<element a="11" b="12" c="13" name="testgroupverifyID" binary="hidden"/> 

xquery ile aşağıdaki gibi bir şeyleri nasıl oluşturabilirim?

$ etiketi:

<mytags> 
    <a>1</a> 
    <b>2</b> 
    <c>3</c> 
    <name>testgroupID</name> 
    <value>198</value> 
</mytags> 
<mytags> 
    <a>11</a> 
    <b>12</b> 
    <c>13</c> 
    <name>testgroupverifyID</name> 
    <binary>hidden</binary> 
</mytags> 

Şu anda sadece gibi bunu yapmak için statik bir yol kullanabilirsiniz = $ x/@ ve sonra

Lütfen tavsiyede {$ etiketiyle iade a. Çok teşekkür ederim.

cevap

2

Bu XQuery:

for $elem in /root/element 
return element mytags { 
      for $child in $elem/(@*|text()) 
      return element {if ($child instance of attribute()) 
          then name($child) 
          else 'value'} { 
        string($child) 
       } 
     } 

Çıktı:

<mytags> 
    <a>1</a> 
    <b>2</b> 
    <c>3</c> 
    <name>testgroupID</name> 
    <value>198</value> 
</mytags> 
<mytags> 
    <a>11</a> 
    <b>12</b> 
    <c>13</c> 
    <name>testgroupverifyID</name> 
    <binary>hidden</binary> 
</mytags>