如何在下一个XML中获取国家/地区位置唯一的标题簿列表?
<BooksLib>
<Book Title="Murder in NY" Year="1980">
<BookLocations>
<Location City="New York" Country="USA"/>
<Location City="Virginia" Country="USA"/>
</BookLocations>
</Book >
<Book Title="Dracula" Year="2000">
<BookLocations>
<Location City="Sydney" Country="Australia"/>
<Location City="Moab" Country="USA"/>
<Location City="Calvados" Country="France"/>
</BookLocations>
</Book>
<Book Title="Romance in calvados" Year="2012">
<BookLocations>
<Location City="Calvados" Country="France"/>
</BookLocations>
</Book >
</BooksLib>
例如,在这个XML中将是&#34; Dracula&#34;,因为澳大利亚只出现一次
现在我明白了:
for $book in doc("books.xml")//Book
where count(distinct-values($Book/BookLocations/Location/@Country)) eq 1
return $Book/data(@Title)
但是这给了我这个县的标题。
答案 0 :(得分:0)
我会稍微改变一下。首先,因为对我来说,一个人实际上是如何思考和第二次感觉更自然,因为它在大型集合中会更快。首先,我会尝试确定哪些国家只出现一次。然后基于此过滤掉结果。以下应该有效:
let $single-loc :=
for $loc in doc("books.xml")//Location/@Country/string()
where count(//Location/@Country[. = $loc]) = 1
return $loc
for $book in doc("books.xml")//Book
where $book/BookLocations/Location/@Country = $single-loc
return $book/data(@Title)
请注意,您的输入XML格式不正确(我编辑了您的帖子)。此外,您的XQuery错误,因为$book
和$Book
是两个不同的变量。