xml - XQuery 连接结果

标签 xml xquery basex

我有一个如下所示的 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>

我做到了,并且可以得到正确的结果,但是,我的查询只能找到depsdests,而不能同时找到。

这是我解决问题的方法。

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 一样以相同的结果显示两者的方法。

最佳答案

这是一个使用group by的版本:

<res>{
    for $airport in //airport
    group by $code := $airport/text()
    order by $code
    return <airport code="{$code}">
        <deps>{ count($airport/parent::flight) }</deps>
        <dests>{ count($airport/parent::dest) }</dests>
    </airport>
}</res>

关于xml - XQuery 连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987768/

相关文章:

java - 有没有办法在basex中使用saxon作为xquery处理器?

java - 我可以让 XQuery 在与 XQJ 绑定(bind)的变量中计算 { $expression } 吗?

XML 结束标记独占一行

c# - LINQ to XML 是否在查询期间加载整个 xml 文档?

javascript - 登录/注销后强制所有页面访问刷新/清除缓存

sql - XML 数据作为历史记录

xml - 如何解决 Marklogic 中的 'Conflicting Update' 错误

java xpath 返回意外值

xml - Scala XML 从可选路径中检索

xml - 检测现有节点的命名空间并通过Xquery将相同命名空间的新节点插入到xml文档中