Как я могу сгенерировать набор узлов из результатов функции, которая дает другой тип?
Рассмотрим следующий xml:
<days>
<day><temperature>40 F</temperature></day>
<day><temperature>45 F</temperature></day>
<day><temperature>50 F</temperature></day>
</days>
Я хотел бы рассчитать среднюю температуру путем суммирования температур и деления на количество. Получить значение для подсчета легко:
count(/days/day/temperature)
Если бы в числах не было единиц, получить сумму также было бы легко:
sum(/days/day/temperature)
Однако, чтобы подвести итог, сначала мне нужно удалить единицы. Достаточно просто, просто используйте translate, чтобы избавиться от ненужного модуля, например
/days/day/temperature/translate(.,' F', '')
Это работает. Но поскольку он возвращает список чисел вместо набора узлов, я не могу использовать результат в функции суммы. Как получить переведенный набор узлов, чтобы я мог рассчитать эту сумму?
1 ответ
Ты можешь использовать sum(/days/day/temperature/number(translate(., ' F', '')))
вычислить сумму. Однако это не имеет ничего общего с наборами узлов, они являются частью модели данных XSLT/XPath 1.0, в XSLT/XPath 2.0 или XQuery вам просто нужно убедиться, что вы вызываете sum
на последовательности числовых значений.