XML& Xquery检索和显示输出

时间:2015-04-13 01:21:09

标签: xml xquery

我认为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>

2 个答案:

答案 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也适用。