我认为XQuery和SQL查询一样,但我发现XQuery很难理解。 我想找到所有图书馆都有相同数量的书籍和多个空架子,因为图书馆名为"牛津"。
<librarycollections>
<library>
<id>1</id>
<library_name> oxford <library_name>
<name>DBMS</name>
<availble_books>2</availble_books>
<empty_shelves>5</empty_shelves>
</library>
for $x in doc("filename.xml")/librarycollections/library/
where $x/@available_books = available_books and $x/empty_shelves ="oxford"
return...
我试图获得的结果是这样的:
Empty shelves/number of books/ library name
<li>2 empty, 8 bookes @ Greenwich library </li>
<li>5 empty, 8 bookes @ UCL library </li>
答案 0 :(得分:0)
实际上,XQuery是XML对数据库表的SQL。 W3Schools保持了很好的XQuery tutorial。
这个条件表达式如何:
for $x in doc("filename.xml")/librarycollections/library/
return if ($x/@library_name="oxford" and $x/available_books=2 and $x/empty_shelves=5)
then <library_name>{data($x/library_name)}</library_name>
else ()
答案 1 :(得分:0)
假设xml建议的格式(你的xquery有&#39; @&#39;,这是属性,你在xml中有一个元素),尝试这样的事情,分两步:
找到牛津&#39;图书馆记录:
let $oxford := doc("filename.xml")/librarycollections/library[library_name = "oxford"]
然后使用它来查找匹配的库记录(相同数量的书籍和至少尽可能多的空架子,跳过牛津记录本身):
return
for $x in doc("filename.xml")/librarycollections/library[id != $oxford/id and available_books = $oxford/available_books and empty_shelves >= $oxford/empty_shelves]
(: format the results, using the variable from the for :)
return <li>{$x/empty_shelves/text()} empty, {$x/available_books/text()} books @ {$x/library_name/text()} </li>
这使用xpath进行选择,而不是使用where子句,但是where也适用。