Как я могу сгенерировать набор узлов из результатов функции, которая дает другой тип?

Рассмотрим следующий 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 на последовательности числовых значений.

Другие вопросы по тегам