如何根据产生另一种类型的函数的结果生成节点集?

How do I generate a nodeset from the results of a function that yields another type?

考虑以下 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', '')

这行得通。但是因为它 returns 是一个数字列表而不是节点集,所以我不能在 sum 函数中使用结果。我如何获得翻译的节点集以便计算总和?

您可以使用 sum(/days/day/temperature/number(translate(., ' F', ''))) 来计算总和。它与节点集无关,但是,它们是 XSLT/XPath 1.0 数据模型的一部分,在 XSLT/XPath 2.0 或 XQuery 中,您只需要确保在序列上调用 sum数值。