Посчитай в xquery - PullRequest
       48

Посчитай в xquery

1 голос
/ 03 мая 2020

Я пытаюсь решить этот вопрос, но этот код дает мне результат, не считая его. Я имею в виду, что мне нужно, чтобы это было 13, но результат делится на строки со значением 1.

1

1

1

1

1

1

1

1

1

1

1

1

1

Это вопрос, и это то, что я сделал.

Укажите количество стран, в которых есть граница (элемент) в стране, где есть буддийская религия (элемент, значение «буддист»). Правильный запрос должен вернуть значение 13.

for $var in /mondial/country
let $religion:=/mondial/country[religions="Buddhist"]/data(@id)
where $var /border/@country=$religion
return data (count($var/name) 

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Это должно привести вас туда. Я изменил имена переменных, чтобы сделать их более читабельными:

let $country := mondial/country
let $buddhist := $country[religions[./text()="Buddhist"]]/@id
return  count($country[.//border[@country=$buddhist]])

Вывод:

13
0 голосов
/ 04 мая 2020

Вместо того чтобы возвращать счетчик для каждого элемента во время итерации, возвращайте каждый выбранный элемент и назначайте его переменной, затем вы можете получить счетчик элементов последовательности, назначенных этой переменной:

let $names := 
  for $var in /mondial/country
  let $religion:= /mondial/country[religions="Buddhist"]/data(@id)
  where $var/border/@country=$religion
  return $var/name 
return count($names)

Вы также можете сделать это в одном операторе XPath: count(/mondial/country[border/@country=/mondial/country[religions="Buddhist"]/data(@id)])

...