Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath XSLT-如何基于多个选项优化变量赋值_Xpath_Xslt 1.0 - Fatal编程技术网

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的扩展。