Xpath XSLT-如何基于多个选项优化变量赋值
我有以下代码:Xpath XSLT-如何基于多个选项优化变量赋值,xpath,xslt-1.0,Xpath,Xslt 1.0,我有以下代码: <xsl:variable name="attribute-name"> <xsl:choose> <xsl:when test="$var1 = 1">attr1</xsl:when> <xsl:when test="$var2 = 1">attr2</xsl:when> <xsl:when test="$var3 = 1">attr3</x
<xsl:variable name="attribute-name">
<xsl:choose>
<xsl:when test="$var1 = 1">attr1</xsl:when>
<xsl:when test="$var2 = 1">attr2</xsl:when>
<xsl:when test="$var3 = 1">attr3</xsl:when>
<xsl:otherwise>attr</xsl:otherwise>
</xsl:choose>
</xsl:variable>
属性1
属性2
属性3
属性
将用于在后面的代码中设置属性:
<tag>
<xsl:attribute name="{$attribute-name}">Something</xsl:attribute>
</tag>
某物
我必须优化代码,因为它确实减慢了我的转换过程。我曾经研究过类似于
select=“if()…”
的构造,但这只能用于简单的if-then-else情况。上述代码可以通过其他xsl:when
进行扩展,因此一个可维护的解决方案会更好。(a)性能完全取决于您使用的XSLT处理器,因此您需要告诉我们这一点。(b) 您有什么证据可以让您得出这种结构是性能瓶颈的结论?(c) 您已经为它添加了XSLT1.0标签,但是提到了“if()”,它需要XSLT2.0。(a)Saxon 6.5.5(b)我在现有代码中添加了上述功能,并且注意到转换过程的运行时间要长得多。嗯,我没有测量/分析它。但是如果我是对的,那么每次使用{$attributename}时都会执行上面的代码。因此,我认为优化它或使用另一种实现将再次提高性能。(c) 你说得对。我修改的XSL文件是1.0,解决方案应该符合1.0。我要尝试的第一件事是在Saxon 9.8下运行它。我知道它的运行速度要快50倍,但我不知道到底是什么特性导致了这种情况。除非您使用的是Saxon XSLT扩展,否则不太可能遇到任何兼容性问题。因此,我必须切换到XSLT2.0样式表。我从字里行间读到我的代码没有“简单”的转换,对吗?另一种可能性(肮脏黑客)是在运行saxon
之前使用sed
将{$attributename}
替换为我需要的。属性名在XSLT运行期间不会更改。样式表绑定了一个从未移植到较新版本的saxon的扩展。