我有一个描述汽车市场的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>
我看到了两个我不知道如何解决的主要问题:
在一个类别中,只列出该类别的汽车(现在,所有汽车都是)
计算该类别的total_sum
非常感谢
答案 0 :(得分:1)
您的查询中存在多个问题:
您总结了数据库中所有汽车的cost
,而不是每个类别中的汽车。
任何cost
中都没有名为car
的元素,只有price
和rental
。
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>