2017-05-03 43 views
1

我有描述汽車集市的XML文檔。汽車城是停車場的集合地。在每個停車場, 有很多車。每輛車屬於一個類別 - 新/舊/租。該文檔如下所示:使用XQuery處理XML - 輸出不正確

<car_mart> 
    <parking> 
     <cars> 
      <car cat="new"> 
       <licence>1PYV582</licence> 
       <price>1000</price> 
      </car> 
      <car cat="new"> 
       <licence>6GD5489</licence> 
       <price>2200</price> 
      </car> 
      <car cat="rent"> 
       <rental>20</rental>  
      </car> 
      <car cat="new"> 
       <licence>5FN1254</licence> 
       <price>1500</price> 
      </car> 
      <car cat="rent"> 
       <rental>25</rental>  
      </car>   
      <car cat="new"> 
       <licence>6HB4524</licence> 
       <price>5800</price> 
      </car>    
      <car cat="rent"> 
       <rental>10</rental>  
      </car>   
     </cars> 
    </parking> 

    <parking> 
     <cars> 
      <car cat="used"> 
      <licence>8UA1294</licence> 
      <price>800</price> 
      </car> 
     </cars> 
    </parking> 

    <!--<parking> 
     ... 
    <parking>--> 

    <cat tag="new"> 
     <cat_name>New</cat_name> 
    </cat> 
    <cat tag="used"> 
     <cat_name>Used</cat_name> 
    </cat> 
    <cat tag="rent"> 
     <cat_name>Rent</cat_name> 
    </cat> 
</car_mart> 

我想使用XQuery提取信息。結果應該是這樣的:

<cat id="new" total_cost="10500"> 
    <cat_name>New</cat_name> 
    <car price="1000"/> 
    <car price="2200"/> 
    <car price="1500"/> 
    <car price="5800"/> 
</cat> 
<cat id="used" total_cost="800"> 
    <cat_name>Used</cat_name> 
    <car price="800"/> 
</cat> 
<cat id="rent" total_cost="55"> 
    <cat_name>Rent</cat_name> 
</cat> 

到現在爲止,我來到了這片XQuery(3.0)。輸出顯然不正確。

<car_list>{ 

for $cat in /car_mart/cat 

return 
<cat id="{$cat/@tag}" total_cost="{sum(/car_mart/parking/cars/car/cost)}"> 
{$cat/cat_name} 
    {for $car in /car_mart/parking/cars/car 
    return 
    if($car/[@cat=$cat/@tag]) 
    then <car price="{$car/price}"></car> 
    else() 
    } 

</cat> 

}</car_list> 

我看到2個主要的問題,我不知道如何解決:

  1. 在一個類中,僅該類別的汽車應列出(現在,所有的人都)

  2. 該類別

的計數total_sum非常感謝你

回答

1

有在查詢多個問題:在數據庫

  1. 你總結過cost所有汽車,而不是在每個類別中的那些。

  2. 沒有任何car命名cost元素,只有pricerental

  3. 您在if($car/[@cat=$cat/@tag])中的謂詞語法錯誤,第一個正斜槓/不應該在那裏。

if構造也可以被單個謂詞所取代。更改所有這些導致以下查詢:

<car_list>{ 
    for $cat in /car_mart/cat 
    let $cars-in-cat := /car_mart/parking/cars/car[@cat=$cat/@tag] 
    return <cat id="{$cat/@tag}" total_cost="{sum($cars-in-cat/(price|rental))}">{ 
    $cat/cat_name, 
    for $car in $cars-in-cat[price] 
    return <car price="{$car/price}"></car> 
    }</cat> 
}</car_list> 
+0

非常感謝。第三個問題有幫助(這樣的小事情,它可以改變很多...)。 – arcus