#xquery
Вопрос:
let $d := doc('mondial.xml')
let $airports := $d/mondial/airport
let $countries := $d/mondial/country
for $data1 in $countries
let $count :=xs:integer("0")
let $name :=$data1/name
let $car_code :=$data1/@car_code
for $data2 in $airports
where $car_code = $data2/@country
$count:= $count 1
where xs:integer($count)>25
return
<country>
<name>{data($name)}</name>
<count>{data($count)}</count>
</country>
Это мой код, когда я запускал этот код, произошла синтаксическая ошибка:
ошибка: синтаксическая ошибка, неожиданный $[ошибка:XPST0003]
$количество:=$количество 1
Комментарии:
1. Ниже я дал ответ, в котором показано, как использовать
at
синтаксис, но чем больше я смотрю на ваш исходный XQuery, тем менее ясно, что вы пытаетесь подсчитать. Вложенное для неправильно организовано, и вы просто получите больше синтаксических ошибок.2. Итак, чего вы хотите достичь, подсчитайте аэропорты в каждой стране и верните количество для тех стран, в которых более 25 аэропортов?
3. Да, я хотел получить список стран с более чем 25 аэропортами.
Ответ №1:
Возможно
let $d := doc('mondial.xml')
let $airports := $d/mondial/airport
let $countries := $d/mondial/country
for $country in $countries
let $airport-count := count($airports[@country = $country/@car_code])
where $airport-count > 25
return
<country>
{
$country/name,
<count>{$airport-count}</count>
}
</country>
Комментарии:
1. Ваш ответ абсолютно правильный, спасибо вам за вашу помощь.
Ответ №2:
На самом деле я нашел ответ
let $d := doc('mondial.xml')
let $airports := $d/mondial/airport
let $countries := $d/mondial/country
for $data1 in $countries
let $name :=$data1/name
let $car_code :=$data1/@car_code
let $count := count($airports[@country eq $car_code])
where $count>25
return
<country>
<name>{data($name)}</name>
<count>{data($count)}</count>
</country>