1

我有一个描述汽车市场的 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>

我看到两个我不知道如何解决的主要问题:

  1. 在一个类别中,仅应列出该类别的汽车(现在,所有汽车都应列出)

  2. 计算该类别的总和

非常感谢

4

1 回答 1

1

您的查询中有多个问题:

  1. 您总结了数据库cost所有汽车的总和,而不是每个类别中的汽车。

  2. cost在 any中没有命名元素car,只有priceand rental

  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>
于 2017-05-03T14:03:08.967 回答