【发布时间】:2016-03-14 12:38:42
【问题描述】:
我有一个如下所示的 XML:
<?xml version="1.0"?>
<root>
<flight>
<number>10001</number>
<airport>LAX</airport>
<dest>
<airport>SFO</airport>
</dest>
</flight>
<flight>
<number>10002</number>
<airport>LAX</airport>
<dest>
<airport>JFK</airport>
</dest>
</flight>
<flight>
<number>10003</number>
<airport>JFK</airport>
<dest>
<airport>LAX</airport>
</dest>
</flight>
</root>
使用 XQuery 我需要得到这样的东西:
<res>
<airport code="LAX">
<deps>2</deps>
<dests>1</deps>
</airport>
<airport code="JFK">
<deps>1</deps>
<dests>1</deps>
</airport>
<airport code="SFO">
<deps>0</deps>
<dests>1</deps>
</airport>
</res>
我做到了,并且可以得到正确的结果,但是,我的查询只能找到deps 或dests,但不能同时找到。
这是我解决问题的方法。
let $all := doc("flights.xml")/root
for $airports in distinct-values($all/flight//*/airport) (:here I get all airport codes:)
order by $airports
for $nr-dep in $all/flight/airport
where $nr-dep = $airports
group by $airports
return <res>
<airport name="{$airports}"><deps>{count($nr-dep)}</deps></airport>
</res>
我在这里得到出发次数。我可以通过将for $nr-dep in $all/flight/airport 替换为for $nr-dep in $all/flight/dest/airport 来轻松获得目标,但是我找不到像预期的XML 那样以相同结果显示两者的方法。
【问题讨论】: