2015-10-16 26 views
2

我想使用給定輸出生成xquery。 我的XML如下:將要產生使用給定輸出生成xquery

<?xml version="1.0" encoding="UTF-8"?> 

    <S_db> 
    <student id="94811"> 
    <name>Rusty Nail</name> 
    <quizzes> 
     <quiz>16</quiz> 
     <quiz>12</quiz> 
    </quizzes> 
    <projects> 
     <project>44</project> 
     <project>52</project> 
    </projects> 
    <exams> 
     <exam>77</exam> 
     <exam>68</exam> 
     <exam>49</exam> 
     </exams> 
    </student> 
    <student id="2562"> 
    <name>Guy Wire</name> 
    <quizzes> 
     <quiz>15</quiz> 
     <quiz>23</quiz> 
    </quizzes> 
    <projects> 
     <project>33</project> 
     <project>47</project> 
     </projects> 
    <exams> 
     <exam>78</exam> 
     <exam>86</exam> 
     <exam>88</exam> 
    </exams> 
    </student> 
    <student id="137745"> 
    <name>Barb Wire</name> 
    <quizzes> 
     <quiz>20</quiz> 
     <quiz>25</quiz> 
    </quizzes> 
    <projects> 
     <project>48</project> 
     <project>60</project> 
     </projects> 
    <exams> 
     <exam>38</exam> 
     <exam>48</exam> 
     <exam>66</exam> 
    </exams> 
    </student> 
    </S_db> 

輸出如下:

<?xml version="1.0" encoding="UTF‑8"?> 
<projects> 
<student> 
<name>Barb Wire</name> 
<total>108</total> 
</student> 
<student> 
<name>Guy Wire</name> 
<total>80</total> 
</student> 
<student> 
<name>Rusty Nail</name> 
<total>96</total> 
</student> 

我試圖生成XQuery作爲如下:

<student> 
    {for $i in (1 to 3) return 
    <total> { for $a in /S_db 
    let $s := sum($a/student[$i]/projects/project) 
    let $name := $a/student[$i]/name 
    return ($s)} 
    </total> 
    } 
    </student> 

我的電流輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<student> 
<total>96</total> 
<total>80</total> 
<total>108</total> 
</student> 

我不知道如何獲得具有相應總標籤的名稱標籤。 我已經存儲在名稱變量尤其是學生的姓名元素

+0

你可以在這裏發佈當前的輸出嗎? –

+0

ERROR - 意外標記 「{」 在路徑表達式 – riya

+0

試試:' {爲$ i的(1至3)返回 {爲$一個在/ S_DB 設$名稱:= $ A /學生[$ I] /名稱 返回($名)} } {爲$ i的(1至3)返回 {爲$一個在/ S_DB 設$ S:= SUM($ A /學生[$ I] /項目/項目) 設$名稱:= $ A /學生[$ i] /名稱 回報($ S)} } '@ris嗨 –

回答

1

這是一種可能的方式:

<projects> 
{ 
    for $s in /S_db/student 
    return 
    <student> 
    { 
     $s/name, 
     <total>{sum($s/projects/project)}</total> 
    } 
    </student> 
} 
</projects> 

xpathtester.com demo

輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<projects> 
    <student> 
     <name>Rusty Nail</name> 
     <total>96</total> 
    </student> 
    <student> 
     <name>Guy Wire</name> 
     <total>80</total> 
    </student> 
    <student> 
     <name>Barb Wire</name> 
     <total>108</total> 
    </student> 
</projects>