我如何显示使用 XQUERY 消除重复的项目



我对XQuery有问题。逻辑:

获取以"Manuel"开头的所有教师的姓名,消除重复并指示每个教师班级中的所有教室。 按名称从最短到最长排序。

我已经这样做了:

for $x in (doc("LMSGI06")//course[starts-with(teacher, "Manuel")])
     order by string-length($x/teacher)
         return
             <teacher>
                 <name>{data(distinct-values($x/teacher))}</name>
                 <classroom>{data($x/classroom)}</classroom>
             </teacher>`

这是我查询的结果:

<teacher>
    <name>Manuel Gómez</name>
    <classroom>2</classroom>
</teacher>
<teacher>
    <name>Manuel Gómez</name>
    <classroom>3</classroom>
</teacher>
<teacher>
    <name>Manuela Berenguel</name>
    <classroom>1</classroom>
</teacher>
<teacher>
    <name>Manuel Antonio López</name>
    <classroom>1</classroom>
</teacher>

xml的结构是这样的:

<shop>
    <education>
        <course id="1">
            <teacher>Manuela Berenguel</teacher>
            <classroom>1</classroom>
        </course>
    </education>
</shop>

我只需要曼努埃尔·戈麦斯出现一次,但我不知道怎么出现。我正在使用distinct-values()但它不起作用。请问有人可以帮我吗?

distinct-values()

当前脚本没有帮助,因为在生成元素时将其应用于每个单独的教师姓名。因此,一次只有一个值,distinct-values()返回正在处理的当前值。

为了删除重复的名称,您需要将distinct-values()应用于所有教师元素值。然后,您需要决定如何在输出中表示多个教室值。如果该教师有多个课程,则以下内容将产生多个课堂元素。

let $manuel-courses := doc("LMSGI06")//course[starts-with(teacher, "Manuel")]
for $teacher in distinct-values($manuel-courses/teacher)
order by string-length($teacher)
return
  <teacher>
    <name>{data($teacher))}</name>
    {$manuel-courses[teacher = $teacher]/classroom)}
  </teacher>`

最新更新