2016-04-02 22 views
0

Belirli bir toplama türüne sahip olmak ve bunu xquery kullanarak ne döndüğüme yeni bir özellik olarak ekleyebilmeyi istiyorum.Xquery - birleştirme özelliğini yeni bir özellik olarak döndürme

Şu anda böyle bir kod var: Ben bir özellik olarak bağış sayısını nasıl bilmiyorum

<bigDonors> 
    <donor donor_id='xx123' numberDonations='5'> 
     <name>Bobbert Bobbily</name> 
    </donor> 
. 
. 
. 
</bigDonors> 

:

for $x in //donors 
where $x/donor[count(donations) > 5] 
return <bigDonors> 
      <donor> 
       {$x/@donor_id} 
       {count($x/donor/donations)} 
       <name>{$x/donor/firstname}</name> 
      </donor> 
     </bigDonors> 

geri gibi bir şey almak istiyorum.

cevap

2

Onu biz Birkaç varsayımda bulunmak zorunda çalışıyoruz kaynak formatını biliyordu ve bu test XML pasajı kullanılırsa biraz daha kolay olurdu:

<?xml version="1.0" encoding="UTF-8"?> 
<donors> 
    <donor donor_id="tst01"> 
    <firstname>Alice</firstname> 
    <donation value="2000"/> 
    <donation value="3000"/> 
    <donation value="4000"/> 
    </donor> 
    <donor donor_id="tst02"> 
    <firstname>Bob</firstname> 
    <donation value="2000"/> 
    </donor> 
</donors> 

Sonra aşağıdaki sorguyu kullanılan : Temel olarak

<bigDonors> 
    <donor donor_id="tst01" donations="3"> 
    <name>Alice</name> 
    </donor> 
</bigDonors> 

senin i çözüm:

for $donor in //donors/donor 
where $donor[count(donation) > 2] 
return <bigDonors> 
     <donor donor_id="{$donor/@donor_id}" donations="{count($donor/donation)}"> 
      <name>{$donor/firstname/text()}</name> 
     </donor> 
     </bigDonors> 

Bu sonucu elde etmek için Konu, istediğiniz etiketi doğrudan sonuç etiketine yazmak ve içeriğini {} içine sarılmış öznitelikler içinde XPath ifadeleri kullanarak almaktı.

+0

Teşekkürler! Bunu denedim ama çift tırnak içine almadım, işte bu yüzden işe yaramadı. . heh – user3324536

0

diğer alternatif şöyle computed attribute constructor kullanarak olurdu: Biz dinamik (bilgisayarlı) adıyla özellik oluşturmak için gereken özellikle

for $x in //donors 
where $x/donor[count(donations) > 5] 
return <bigDonors> 
      <donor> 
       {attribute donor_id{$donor/@donor_id}} 
       {attribute donations{count($donor/donation)}} 
       <name>{$x/donor/firstname}</name> 
      </donor> 
     </bigDonors> 

Hesaplanan nitelik yapıcı yararlıdır.