2015-03-31 59 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>