我想学习XQuery,我还没有想出如何在我所做的以下xml文件中选择不同的教师。我查了distinct-values(),但它似乎只返回一串字符串。如果我只想运行XQuery而不声明函数如functx:distinct-deep和functx:来自http://www.xqueryfunctions.com/xq/c0015.html#c0053的distinct-nodes,是否有一种方法可以选择同一年在信用和非信用课程中教过的不同教师从下面的XML文件?我会很感激你的帮助。谢谢。XQuery:选择不同的节点
<DB>
<credit>
<course_title>biology101</course_title>
<teacher>
<lastname>Smith</lastname>
<firstname>Amy</firstname>
</teacher>
<teacher>
<lastname>Hanson</lastname>
<firstname>John</firstname>
</teacher>
<teacher>
<lastname>Lee</lastname>
<firstname>Sandra</firstname>
</teacher>
<year>2013</year>
</credit>
<credit>
<course_title>chemistry101</course_title>
<teacher>
<lastname>Richardson</lastname>
<firstname>Rob</firstname>
</teacher>
<teacher>
<lastname>Hanson</lastname>
<firstname>John</firstname>
</teacher>
<year>2013</year>
</credit>
<noncredit>
<course_title>physics101</course_title>
<teacher>
<lastname>Hanson</lastname>
<firstname>John</firstname>
</teacher>
<teacher>
<lastname>Head</lastname>
<firstname>Peter</firstname>
</teacher>
<year>2013</year>
</noncredit>
<noncredit>
<course_title>physics101</course_title>
<teacher>
<lastname>Lee</lastname>
<firstname>Sandra</firstname>
</teacher>
<teacher>
<lastname>Head</lastname>
<firstname>Peter</firstname>
</teacher>
<teacher>
<lastname>Hanson</lastname>
<firstname>John</firstname>
</teacher>
<year>2013</year>
</noncredit>
</DB>
我用下面的XQuery:
let $DB := doc("myDB.xml") /DB
let $credit_teacher := $DB/credit/teacher
for $noncredit_teacher in $DB/noncredit/teacher
where $DB/credit/year = $DB/noncredit/year
and $credit_teacher/lastname = $noncredit_teacher/lastname
and $credit_teacher/firstname = $noncredit_teacher/firstname
return $noncredit_teacher
但复制教师返回:
<teacher>
<lastname>Hanson</lastname>
<firstname>John</firstname>
</teacher>
<teacher>
<lastname>Lee</lastname>
<firstname>Sandra</firstname>
</teacher>
<teacher>
<lastname>Hanson</lastname>
<firstname>John</firstname>
</teacher>
如果我使用不同的值,则返回字符串的序列: HansonJohn LeeSandra
joemfb,感谢您的咨询。我尝试使用functx:distinct-nodes()和functx:distinct-deep,但仍然得到相同的结果,没有任何重复数据删除。你知道我可以尝试的其他方法吗?再一次感谢你。 – jf1034