2016-04-03 47 views
0

我一直在試圖編寫一個查詢來獲取不同的屬性值後使用if/then來確定我是否會在第一個地方使用該元素。這裏是我的例子xml和我迄今爲止所寫的查詢:Xquery - 只返回不同的屬性if/then

<donors> 
    <donor donor_id="x21" cn_id="x12"> 
     <homeless>$1201</homeless> 
     <conservation>$300</conservation> 
     <cancerResearch>$250</cancerResearch> 
    </donor> 
    <donor donor_id="x23" cn_id="x13"> 
     <homeless>$121</homeless> 
     <conservation>$30</conservation> 
     <cancerResearch>$50</cancerResearch> 
    </donor> 
    <donor donor_id="x24" cn_id="x14"> 
     <homeless>$1201</homeless> 
     <cancerResearch>$250</cancerResearch> 
    </donor> 
    <donor donor_id="x25" cn_id="x12"> 
     <homeless>$1201</homeless> 
     <conservation>$300</conservation> 
     <cancerResearch>$250</cancerResearch> 
    </donor> 
</donors> 

我想先獲得所有有孩子「養護」的捐助者。我做的是以下幾點:

<conservationists> 
{ 
for $x in //donor 
return 
    if(exists($x/conservation)) 
    then <conservationist cn_id="{$x/@cn_id}/> 
    else() 
} 
</conservationists> 

我試圖在包裝不同的值整件事但只是給了什麼,每一個地方一樣,我試着做一些我剛剛結束了一個結束這種效果標籤。

回答

3

這是一種可能的方式:

<conservationists> 
{ 
    for $x in distinct-values(//donor[conservation]/@cn_id) 
    return 
     <conservationist cn_id="{$x}"/> 
} 
</conservationists> 

xpathtester demo

表達distinct-values(//donor[conservation]/@cn_id)返回來自具有至少一個conservation子元素donor元素cn_id屬性的不同的值。

+0

這是行不通的。 我可以問你一個快速跟進嗎? 如果我想嘗試一種替代方案:那些沒有保護的人,我將如何添加[不存在(保存))] – user3324536

+0

是的,您可以修改謂詞。 '捐獻者[不(養護)]'也適用於我...... – har07