代码之家  ›  专栏  ›  技术社区  ›  halivingston

XSLT有时有效,有时不混淆

  •  0
  • halivingston  · 技术社区  · 15 年前
    <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 回复  |  直到 15 年前
        1
  •  3
  •   Tomalak    15 年前

    因为 attribute value templates (括号中的表达式)do 在任何地方都进行评估,但只在属性(因此而得名)中进行评估。用途:

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