Почему это выражение Xquery возвращает нулевое значение? - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу получить максимальное значение для атрибута.У меня есть следующее утверждение:

let $ posts: = doc ("Posts.xml") / posts / row [./@ OwnerUserId = $ user / @ Id]

let $ maxScore: = fn: max (xs: integer ($ posts / row / @ Score))

Когда я хочу вернуть maxScore, он отображается как пустое значение.После дальнейшей обработки, следующее:

Return $ posts / row / @ Score

Также отображается как пустое, хотя я знаю, что у каждой строки есть «Score»атрибут

Я боролся с этим более часа, любая помощь приветствуется

1 Ответ

0 голосов
/ 15 ноября 2018

Вы выбираете элементы row, которые соответствуют критериям вашего предиката. Таким образом, переменная $posts будет иметь последовательность элементов row.

Если вы хотите выбрать @Score из каждого из row элементов в переменной $posts, ваш XPath должен быть: $posts/@Score

Было бы менее запутанным, если бы вы назвали переменную $rows.

Или измените XPath для фактического выбора posts элементов:

let $posts := doc("Posts.xml")/posts[row/@OwnerUserId = $user/@Id]
let $maxScore := fn:max(xs:integer($posts/row/@Score))
...