XQuery:简单查询示例
问题描述:
我有一个任务来创建一个xml文件并使用XQuery查询它。该文件看起来大致是这样的: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
我看到的问题是对于每位作者,我都会返回每本书名,但我不确定如何让它只返回与特定作者对应的书名。有什么建议么?
谢谢!
答
使用:
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
谢谢,这真的很有帮助。我忘记了如何使用XPath正确导航。 – coffeeNjava 2013-05-03 14:00:33
@coffeeNjava,不客气。我建议从一本关于XPath的好书开始。 – 2013-05-03 14:24:31