我做了这个XQuery查询,但它不起作用,我不知道为什么。 我的XML是这样的:
<entries xmlns="http://ref.otcnice.com/webservice/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="http://ref.otcnice.com/webservice/entries.xsd">
<entry>
<ID>1021</ID>
<name_fr>AC BY MARRIOTT NICE</name_fr>
<standings_levels>
<standings_level>1 étoiles</standings_level>
</standings_levels>
<tariffs>
<tariff>
<name>Chambre simple</name>
<min>120</min>
</tariff>
</tariffs>
</entry>
</entries>
我想在'min'上做一个平均因为我有很多其他类似的条目,所以我做了这个:
let $hotel := doc('data/entries_hotels.xml')/entries/entry where $hotel/standings_levels/standings_level = '1 étoile'
return
let $prixUneEtoile := avg($hotel/tariffs/tariff/min)
return
<data>
<y>{$prixUneEtoile}</y>
</data>
问题是While
不起作用,并且avg是针对所有条目而不仅仅是'1étoile'的条目
我试过这个:让$ hotel:= doc('data / entries_hotels.xml')/ entries / entry $hotel/standings_levels/standings_level[text() eq '1 étoiles']
并出现同样的问题。
我不明白问题出在哪里。
任何帮助?
感谢
答案 0 :(得分:2)
此查询中存在许多错误。这是一个工作版本:
declare namespace e = "http://ref.otcnice.com/webservice/";
let $entries := <entries xmlns="http://ref.otcnice.com/webservice/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="http://ref.otcnice.com/webservice/entries.xsd">
<entry>
<ID>1021</ID>
<name_fr>AC BY MARRIOTT NICE</name_fr>
<standings_levels>
<standings_level>1 étoiles</standings_level>
</standings_levels>
<tariffs>
<tariff>
<name>Chambre simple</name>
<min>120</min>
</tariff>
</tariffs>
</entry>
</entries>
let $hotel := $entries/e:entry[e:standings_levels/e:standings_level = '1 étoiles']
let $prixUneEtoile := avg($hotel/e:tariffs/e:tariff/e:min)
return
<data>
<y>{$prixUneEtoile}</y>
</data>
您可以在http://try.zorba.io/queries/xquery/hzdl%2F7TkVt6nErwmYTqCcyb10MY%3D
播放答案 1 :(得分:1)
第一个问题是您要查询的元素位于命名空间中,但您的路径表达式未使用此命名空间。一种解决方案是更改默认元素名称空间。您可以在查询开头添加:
declare default element namespace "http://ref.otcnice.com/webservice/";
第二个问题是您需要在查询中将“1étoile”更改为“1étoiles”。