XSLT有时会工作,有时候不会 - 混淆

时间:2010-02-10 10:45:42

标签: jquery xslt

<xsl:template name="ClickPIB">
  <xsl:param name="abc" />
  <xsl:param name="xyz" />
  <xsl:if test="string-length($abc) &gt; 0">

   <script type="text/javascript">

$(document).ready(function () {
 $('#<xsl:value-of select="concat($abc, '_td')"/>').getXYZ("<xsl:value-of select="concat(substring-before($abc,'_'), '_landreover_', substring-after($xyz,'PXN'))"/>"); 
});

</script>
  </xsl:if>
</xsl:template>

上述工作正常......

<xsl:template name="ClickPIB">
  <xsl:param name="abc" />
  <xsl:param name="xyz" />
  <xsl:if test="string-length($abc) &gt; 0">

   <script type="text/javascript">

$(document).ready(function () {
 $('#<xsl:value-of select="concat($abc, '_td')"/>').getXYZ("{concat($abc, 'blahblah')}", "<xsl:value-of select="concat(substring-before($abc,'_'), '_landreover_', substring-after($xyz,'PXN'))"/>"); 
});

</script>
  </xsl:if>
</xsl:template>

上面没有,我唯一添加的是“{concat($ abc,'blahblah')}”,这是没有用值插值的部分。

为什么?哦为什么!?

1 个答案:

答案 0 :(得分:3)

因为attribute value templates(大括号中的表达式) not 在任何地方进行评估,但仅在属性中进行评估(因此名称)。使用:

<xsl:value-of select="concat($abc, 'blahblah')" />

就像你想要在输出中写入值的其他位置一样。

为了提高代码清晰度,我建议使用变量:

<xsl:template name="ClickPIB">
  <xsl:param name="abc" />
  <xsl:param name="xyz" />
  <xsl:if test="string-length($abc) &gt; 0">
    <xsl:variable name="vSelector" select="concat($abc, '_td')" />
    <xsl:variable name="vArgument" select="concat(substring-before($abc,'_'), '_landreover_', substring-after($xyz,'PXN'))" />

     <script type="text/javascript">
       $(document).ready(function () {
         $('#<xsl:value-of select="$vSelector"/>').getXYZ("<xsl:value-of select="$vArgument"/>"); 
       });
     </script>
  </xsl:if>
</xsl:template>