XSL。 计算表达式(XSL. Evaluate expression)

2019-07-28 20:05发布

对不起我的英语不好。

XSL 1.0。 我怎样才能从元素或属性值计算表达式?

例如XML:

<position>
  <localizedName>ref-help</localizedName>
  <reference>concat('../help/', $lang, '/index.html')</reference>
</position>

我尝试用表情从“参考”的属性:

<xsl:for-each select="/content/positions/position">
        <li>
          <!--Save expression to variable...-->
          <xsl:variable name="path" select="reference"/>
          <!--Evaluate variable and set it value to 'href'-->
          <a target="frDocument" href="{$path}">
            <xsl:variable name="x" select="localizedName"/>
            <xsl:value-of select="$resources/lang:resources/lang:record[@id=$x]"/>
          </a>
        </li>
      </xsl:for-each>

但我得到的字符串:

文件:/// C:/ sendbox /作者/应用/支持/的concat( '../help/',%20%24lang,%20'/index.html')

我该如何评价呢?

问候

Answer 1:

如果您的XSLT处理器实现的EXSLT扩展,你可以参考动态评估字符串作为XPath表达式的函数 :

<xsl:stylesheet 
  version="1.0"
  xmlns="http://www.w3.org/1999/XSL/Transform"
  xmlns:dyn="http://exslt.org/dynamic"
  extension-element-prefixes="dyn"
>
  <xsl:template match="content">
    <xsl:apply-templates select="positions/position" />
  </xsl:template>

  <xsl:template match="position">
    <li>
      <a target="frDocument" href="{dyn:evaluate(reference)}">
        <xsl:value-of select="
          $resources/lang:resources/lang:record[@id=current()/localizedName]
        "/>
      </a>
    </li>
  </xsl:template>
</xsl:stylesheet>

注意:

  • 没有必要使用它们之前保存的东西在一个变量
  • 有一个current()你可能错过的功能
  • 使用<xsl:apply-templates><xsl:template>赞成<xsl:for-each>


文章来源: XSL. Evaluate expression
标签: xslt evaluate