Xquery计算属性的平均值

时间:2013-11-04 20:40:06

标签: attributes xquery average

我有一个像这样的XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="class3.xsl" type="text/xsl" ?>
<school>
<student><name>Jack T</name>
<course title="INF8430" note="78" />
<course title="INF1030" note="69" />
<course title="INF1230" note="85" /></student>
<student><name>Marty L</name>
<course title="INF8430" note="95" />
<course title="INF1030" note="82" />
<course title="INF1230" note="77" /></student>
<student><name>Ben L</name>
<course title="INF9430" note="59" />
<course title="INF1030" note="78" />
<course title="INF1230" note="79" /></student>
</school>

在我的XQuery中,我使用它:

{  
for $s in distinct-values(doc("class3.xml")//course/@title)
return  
<course title="{$s}">

</course>

}

我尝试从每个不同的标题获得平均值。 我正确地得到了标题,但我怎么能计算平均值? 我在课程标签之间尝试了很多东西来找到平均值,有人可以帮助我 感谢

2 个答案:

答案 0 :(得分:2)

在你的return语句中添加:

avg(doc("class3.xml")//course[@title=$s]/@note) 

答案 1 :(得分:1)

我确信有更好的方法......不确定这是你想要的但是它会帮助你到达那里我希望:)

let $doc := 
 <school>
 <student><name>Jack T</name>
 <course title="INF8430" note="78" />
 <course title="INF1030" note="69" />
 <course title="INF1230" note="85" /></student>
 <student><name>Marty L</name>
 <course title="INF8430" note="95" />
 <course title="INF1030" note="82" />
 <course title="INF1230" note="77" /></student>
 <student><name>Ben L</name>
 <course title="INF9430" note="59" />
 <course title="INF1030" note="78" />
 <course title="INF1230" note="79" /></student>
 </school>

return 
    for $s in $doc//student
    let $total := sum($s/course/@note) div count($s/course)
    return <name>{$s/name}<avg>{$total}</avg></name>