在使用if / then确定我是否首先使用该元素之后,我一直在尝试编写查询来获取不同的属性值。这是我的示例xml和我迄今为止编写的查询:
<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>
我想首先让所有有孩子的捐赠者得到保护&#34;。我为此完成了以下工作:
<conservationists>
{
for $x in //donor
return
if(exists($x/conservation))
then <conservationist cn_id="{$x/@cn_id}/>
else ()
}
</conservationists>
我尝试将整个事物包装在不同的值中,但这并没有给出任何结果,而且我尝试做的其他任何事情都是为了达到这个效果,我最终得到了一个结束标记。
答案 0 :(得分: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)
会从cn_id
元素中返回donor
个属性的不同值,这些元素至少包含一个conservation
子元素。