Полагаю, вы хотите сосчитать
count(
(for $y in /moimenta/produtores/produtor
where $y/colheita/cod_colheita="FE23569"
and $y/colheita/@ano="2018"
return $y)/colheita/lotes/lote/calibragem/calib
)
или, возможно, короче
count(/moimenta/produtores/produtor/colheita[cod_colheita="FE23569" and @ano="2018"]/lotes/lote/calibragem/calib)
Это должно работать, если все элементы находятся в одном и том же пространстве имен по умолчанию, но поскольку задействованы два других пространства имен, вам нужно больше объявлений пространства имен и использовать префиксы:
declare default element namespace "http://www.macamoimenta.pt/";
declare namespace clt = "http://www.macamoimenta.pt/lote";
declare namespace clb = "http://www.macamoimenta.pt/calibragem";
count(/moimenta/produtores/produtor/colheita[cod_colheita="FE23569" and @ano="2018"]/lotes/lote/clt:calibragem/clb:calib)
https://xqueryfiddle.liberty -development.net / 3Nqn5Y7
Исправление пространства имен также работает для вашей первоначальной попытки после выполнения вызова count
для правильного выражения:
declare default element namespace "http://www.macamoimenta.pt/";
declare namespace clt = "http://www.macamoimenta.pt/lote";
declare namespace clb = "http://www.macamoimenta.pt/calibragem";
count(
(for $y in /moimenta/produtores/produtor
where $y/colheita/cod_colheita="FE23569"
and $y/colheita/@ano="2018"
return $y)/colheita/lotes/lote/clt:calibragem/clb:calib
)
Это трудно читать, однако, если вы хотите использовать выражение for
, может быть понятнее, например,
let $colheitas :=
for $y in /moimenta/produtores/produtor/colheita
where $y/cod_colheita="FE23569"
and $y/@ano="2018"
return $y
return count($colheitas/lotes/lote/clt:calibragem/clb:calib)
https://xqueryfiddle.liberty -development.net / 3Nqn5Y7 / 1