XQuery:简单的查询示例

时间:2013-05-03 02:04:36

标签: xquery

我有一个创建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>

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

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

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

我得到的结果是: 标题1 标题2 标题1 标题2 标题1 标题2

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

谢谢!

1 个答案:

答案 0 :(得分:2)

使用

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

当根据提供的XML文档评估此XPath表达式(也就是XQuery,因为XPath是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>

产生了想要的正确结果:

Title1 Title1 Title2