2016-04-02 9 views
0

私はある種類の集約を取得し、それをxqueryを使用して返すものの新しい属性として入れたいと考えています。Xquery - 新しい属性として集計を返します。

は現在、私はこのようなコードを持っている:私は属性として寄付の数を取得する方法がわからない

<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> 

が、私は戻ってのようなものを取得したいです。

答えて

2

我々はので、私はいくつかの仮定をしなければならなかったし、このテストXMLスニペットを使用して作業しているソース形式を知っていた場合、それは少し楽だっただろう:

<?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> 

を私は、次のクエリを使用:基本的に

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

あなたの私の解決策:

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> 

は、この結果を取得するにはssueは、必要な属性を結果タグに直接書き込んで、{}で囲まれた属性内のXPath式を使用してコンテンツを取得することでした。

+0

ありがとうございます!私はそれを試みましたが、二重引用符を入れなかったので、それがうまくいかなかったのです。 。ええ – user3324536

0

別の方法としては、そうのようなcomputed attribute constructorを使用して次のようになります。私たちはダイナミック(計算された)名前の属性を作成する必要がある場合は特に

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> 

計算された属性コンストラクタが便利です。

関連する問題