2

我有一个任务是创建一个 xml 文件并使用 XQuery 对其进行查询。该文件大致如下所示:

<library>
    <book>
        <title>Title1</title>
        <author>Author1</author>
        <author>Author2</author>
        <subject>Subject1</subject>
    </book>
    <book>
        <title>Title2</title>
        <author>Author3</author>
        <subject>Subject1</subject>
    </book>
</library>

对于每个作者,我应该返回书名,所以显然 Title 1 应该返回两次。

我一直在尝试这样的事情:

let $a:=doc("/home/user/library.xml")/library/book
for $x in $a/title, $y in $a/author
return $x

我得到的结果是: Title1 Title2 Title1 Title2 Title1 Title2

我看到问题在于,对于每个作者,我都会返回每本书的标题,但我不确定如何让它只返回与特定作者相对应的书名。有什么建议么?

谢谢!

4

1 回答 1

2

使用

   for $author in distinct-values(/*/*/author)
     return
       /*/book[$author = author]/title/string()

当这个 XPath 表达式(也是 XQuery,因为 XPath 是 XQuery 的一个子集)针对提供的 XML 文档进行评估时

<library>
    <book>
        <title>Title1</title>
        <author>Author1</author>
        <author>Author2</author>
        <subject>Subject1</subject>
    </book>
    <book>
        <title>Title2</title>
        <author>Author3</author>
        <subject>Subject1</subject>
    </book>
</library>

产生了想要的正确结果:

Title1 Title1 Title2
于 2013-05-03T03:38:05.620 回答