如何根据产生另一种类型的函数的结果生成节点集?
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
数值。
考虑以下 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
数值。