2012-04-06 105 views
0

對不起,我的英語。XSL。評估表達

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/author/application/support/concat('../ help /',%20%24lang,%20'/ index.html')

我該如何評估它?

問候

回答

1

如果您的XSLT處理器實現了EXSLT擴展,你可以參考a function that dynamically evaluates strings as XPath expressions

<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>
+0

我使用的瀏覽器(Internet Explorer 9中,谷歌Chrome 18.0.1025.151 m和Safari瀏覽器5.1.5)。表達'dyn:評估'不起作用。 :((((( – 2012-04-06 16:37:29

+0

)然後你運氣不好,必須使用不同的方法評估字符串作爲表達式不是內置到XSLT中你有沒有想過在服務器端進行轉換 – Tomalak 2012-04-06 16:41:06

+0

不幸的是,這些文件放在本地計算機上 – 2012-04-06 16:47:43