XQuery:简单查询示例

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 
+0

谢谢,这真的很有帮助。我忘记了如何使用XPath正确导航。 – coffeeNjava 2013-05-03 14:00:33

+0

@coffeeNjava,不客气。我建议从一本关于XPath的好书开始。 – 2013-05-03 14:24:31