繁体   English   中英

人口数据查询

[英]Population data xquery

对于下面的XML数据,我试图在此处显示输出:即,我想查看人口大于20000的国家/地区的名称,条件是显示的城市数应仅针对人口更多的城市。超过3500。此外,对于某些国家/地区,该城市位于省内。


<result>
  <country name="B">
    <num_cities>3</num_cities>
  </country>
  <country name="C">
    <num_cities>2</num_cities>
  </country>
</result>

---------------------------这是XML数据------------------ ----

<country id="1" name="A" population="12000">
   <name>A</name>
   <city id="c1" country="1">
      <name>T1</name>
      <population>5000</population>
   </city>
   <city id="c2" country="1">
      <name>T2</name>
      <population>3000</population>
   </city>
   <city id="c3" country="1">
      <name>T3</name>
      <population>4000</population>
   </city>
</country>
<country id="3" name="B" population="80000">
   <name>B</name>
   <city id="c4" country="2">
      <name>T4</name>
      <population>6000</population>
   </city>
   <city id="c5" country="2">
      <name>T5</name>
      <population>2000</population>
   </city>
   <city id="c6" country="2">
      <name>T6</name>
      <population>60000</population>
   </city>
   <city id="c7" country="2">
      <name>T7</name>
      <population>12000</population>
   </city>
</country>
<country id="3" name="C" population="68000">
   <name>C</name>
   <province>P1</province>
   <city id="c8" country="3">
      <name>T8</name>
      <population>51000</population>
   </city>
   <city id="c9" country="3">
      <name>T9</name>
      <population>3000</population>
   </city>
   <city id="c10" country="3">
      <name>T10</name>
      <population>14000</population>
   </city>
</country>

我写了这个xquery,但我不知道如何排除人口> 3500的城市。我也可能没有正确编写代码...请协助。

for $c in doc("abc")//country
let $city:= count($c/city/name)
let $citypr:= count($c/province/city/name)
where $c/@population>1000000
return
<result>
<country name='{data($c/name) }'></country>
 <num_of_cities>
 {
 if (exists ($c/city/name)) then
 $city
 else
 $citypr
}
 </num_of_cities>
</result>

一些提示:

  • 在检索内容的说明符中,不要理会可以更早过滤掉where子句的地方。

  • 如果您只希望有一个<result> ,而不是每个数据一个,则需要在FLWOR表达式之前启动它。 无论您“退货”如何,每件商品都会退货一次。

这是更接近的示例:

<result>{
  for $large-country in doc("abc")//country[@population > 20000]
  let $large-cities := $country/city[population > 3500]
  return
    <country name="{$large-country/@name}">
      <num_cities>{count($large-cities)}</num_cities>
    </country>
}</result>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM