我有一个创建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
我看到问题在于,对于每个作者,我都会返回每个书名,但我不知道如何让它只返回与特定作者相对应的书名。有什么建议?
谢谢!
答案 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