Let / While在XQuery中不起作用

时间:2014-01-14 17:40:16

标签: xml xquery

我做了这个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'] 并出现同样的问题。 我不明白问题出在哪里。 任何帮助? 感谢

2 个答案:

答案 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”。