xsl:sequence vs xsl:value-of in function,最好使用

时间:2017-05-03 08:51:10

标签: xslt xslt-2.0

在函数示例中我看到使用xsl:sequence当我用xsl更改它时:value-of它给出相同的结果,使用xsl:sequence而不是xsl:value-of的优点是什么。 / p>

1 个答案:

答案 0 :(得分:2)

始终使用xsl:sequence

xsl:sequence返回其select表达式的结果。

xsl:value-of获取select表达式的结果并将其包装到文本节点中。如果函数的声明结果是(例如)xs:integer,则文本节点将被雾化并转换为xs:integer。例如,

<xsl:function name="f:add" as="xs:integer">
  <xsl:param name="x" as="xs:integer"/>
  <xsl:param name="y" as="xs:integer"/>
  <xsl:value-of select="$x + $y"/>
</xsl:function>

将执行x和y的整数加法,将结果转换为字符串,将其包装在文本节点中,雾化文本节点以获取无类型的原子值,然后将无类型的原子值转换为整数。

如果您很幸运,优化程序会发现这完全是浪费精力并避免开销,但最好不要依赖它。

还有其他情况,xsl:value-of根本不起作用,例如函数返回一个节点。