2014-01-14 43 views
0

我做了這個XQuery查詢,但它不起作用,我不知道爲什麼。 我的XML是這樣的:讓/ While在XQuery中不起作用

<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 := 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不起作用,並平均在所有條目上,而不是隻有條目'1étoile' 我試過這個:let $ hotel:= doc('data/entries_hotels.xml')/ entries/entry其中$hotel/standings_levels/standings_level[text() eq '1 étoiles'] 和出現相同的問題。 我不明白問題在哪裏。 任何幫助? 謝謝

回答

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

+0

是的,它的工作,謝謝:) – Tumeco

1

第一個問題是您正在查詢的元素位於名稱空間中,但您的路徑表達式不使用此名稱空間。一種解決方案是更改默認元素名稱空間。您可以在查詢開始補充一點:

declare default element namespace "http://ref.otcnice.com/webservice/"; 

的第二個問題是,你需要在查詢中更改「1個Étoile廣場」到「1個ETOILES」。

+0

謝謝您的回答 我添加了一個聲明命名空間,改變了1個ETOILES用它玩,但現在我還沒有得到我的查詢,如果我刪除了所有standings_level的平均值的命名空間,而且我只想要1étoiles。 – Tumeco

+0

您使用的是什麼XQuery處理器? – joemfb

+0

我正在使用BaseX,但現在正在查詢wcandillon。 謝謝 – Tumeco