<xsl:template name="ClickPIB">
<xsl:param name="abc" />
<xsl:param name="xyz" />
<xsl:if test="string-length($abc) > 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) > 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')}”,这是没有用值插值的部分。
为什么?哦为什么!?
答案 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) > 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>