Будет ли сортировка по abs(1 - @ratio)
давать самый близкий?
Вы можете дополнительно обработать свои lista
элементы, например, с помощью
for $l in */lista
order by abs(1 - $l/@ratio) ascending
count $pos
where $pos = 1
return data($l/@latitud)
При https://xqueryfiddle.liberty -развитии.net / b4GWVa , которая возвращает 30
.Вместо использования count/where
для идентификации первого / ближайшего элемента в отсортированной последовательности вы также можете использовать head
:
head(
for $l in */lista
order by abs(1 - $l/@ratio) ascending
return $l
)/@latitud/data()
Вместо использования order by
для сортировки в XQuery 3.1 с более высоким порядком /встроенные функции, вы также можете использовать функцию sort
, например,
data(head(sort(lista, (), function($l) { abs(1 - $l/@ratio) }))/@latitud)
полная выборка будет
declare context item := <testadvarden>
<lista latitud="26" ratio="1.210681245514598"/>
<lista latitud="27" ratio="1.1472684079724134"/>
<lista latitud="28" ratio="1.108013683878131"/>
<lista latitud="29" ratio="1.0367234044480529"/>
<lista latitud="30" ratio="0.9820439101177922"/>
<lista latitud="31" ratio="0.8714211421572755"/>
<lista latitud="32" ratio="0.7316921947582108"/>
</testadvarden>;
data(head(sort(lista, (), function($l) { abs(1 - $l/@ratio) }))/@latitud)