2010-02-10 31 views
0
<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> 

上述工作正常....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("{concat($abc, 'blahblah')}", "<xsl:value-of select="concat(substring-before($abc,'_'), '_landreover_', substring-after($xyz,'PXN'))"/>"); 
}); 

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

以上不,我说的唯一的事情是“{CONCAT($ abc,'blahblah')}“,这是没有用值插入的部分。

为什么?哦为什么!?

回答

3

因为attribute value templates(大括号中的表达式)做处处得到评估,但仅在属性(因此得名)。使用:

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

感谢,我才意识到事情在生活中深刻。 3 AM-9AM之间无法完成XSLT。这是我在这几个小时内唯一无法编码的开发语言,不久之后它就能正常工作。 我几乎完全一样的代码,我尝试了 ...但我“忘了”/最后,并击败我的头靠在墙上...很高兴我复制并粘贴您的代码以查看其工作,并意识到我的错误。 谢谢。 – halivingston 2010-02-10 11:20:57

+0

+1为更多的清洁和工作代码.. – 2010-02-10 11:39:54