XSLT 使用 concat 或多个 value-of 元素来连接变量?

XSLT use concat or multiple value-of elements to join variables?

假设我有大约 20 个变量要加入到一个 csv 字符串中。我应该更喜欢 concat(),还是只是将所有变量放在 <xsl> 元素中?

任一:

<xsl:value-of select="concat($var1, ';', ..., $var10)"/>

或:

<xsl:value-of select="$var1"/>
<xsl:text>;</xsl:text>
...
<xsl:value-of select="$var10"/>

特别是关于性能,因为我有数亿行要处理。

contact 方法是否类似于 java StringBuilder,元素方法是否类似于 string += val 重新分配?如果是,concat当然会更好。但这是真的吗?

不太可能存在可衡量的性能差异,但找出答案的唯一方法是对其进行衡量。

在 Saxon 中,concat() 调用将始终在内存中构建字符串(直到下一个 Saxon 版本...),而一系列 xsl:text/xsl:value-of 调用将(其中可能)将其增量写入序列化程序,因此如果字符串非常大,这可能会对内存使用产生影响。

至少我通过分析发现 contact() 的性能比多次 xsl:text/xsl:value-of 调用好 25%。但我不知道这是否可以笼统地说,但在我的情况下有数亿行就是这样。