2015-03-31 38 views
0

我是XQuery的新手,我無法使用以下簡單查詢來工作:xml問題上的幫助和解釋

列表學生及其導師的名字。

如果存在帶有studentID和mentorID的Student XML,InstructorXML帶有與matchManager的mentorID匹配的instructorID,最後是帶有與studentID和InstructorID匹配的名稱和ID的Person XML。

$Saxon:> 
    <table border="1" > 
    <tr> <td>Student</td> <td >Mentor</td> </tr> 
    { 
    for $s in doc("ComS363/Projects/Datasets/Student.xml"), 
    $i in doc("ComS363/Projects/Datasets/Instructor.xml"), 
    $p in doc("ComS363/Projects/Datasets/Person.xml") 
    where $s/MentorID/text() = $i/InstructorID/text() 
    and $s/StudentID/text() = $p/ID/text() 
    and $i/InstructorID/text() = $p/ID/text() 
    return <tr> <td>{$p/Name/text()}</td> <td>{$p/Name/text()}</td> </tr> 
    } 
    </table> ; 

我試過上面的代碼,但它不起作用。我的問題是一個語法問題或一個邏輯問題,我需要幫助確定並解決問題。謝謝。

回答

1

您尚未顯示您的XML源文檔。但是,你的詢問並沒有太大的意義

where $s/MentorID/text() = $i/InstructorID/text() 
    and $s/StudentID/text() = $p/ID/text() 

$ S/MentorID將只選擇什麼,如果的$ s中的最外層的元素是MentorID元素,而如果最外層的元素$ S/StudentID只會選擇任何內容是一個StudentID元素。它不可能是兩個!

請注意,使用/ text()幾乎總是不好的做法。

我希望看到這樣的事情,但我猜你的元素名稱:

for $s in doc("ComS363/Projects/Datasets/Student.xml")/Students/Student, 
    $i in doc("ComS363/Projects/Datasets/Instructor.xml")/Instructors/Instructor, 
    $p in doc("ComS363/Projects/Datasets/Person.xml")/Persons/Person 
    where $s/MentorID = $i/InstructorID 
    and $s/StudentID = $p/ID 
    and $i/InstructorID = $p/ID 
    return <tr> <td>{$p/ID}</td> <td>{$p/Name}</td> </tr>