2010-04-18 128 views
5

这听起来很简单,但没有我的“易”语法的工作:如何使用xsl:参数值的方式在xsl:属性名称=“宽度”

<xsl:param name="length"/> 
<xsl:attribute name="width">$length</xsl:attribute> 
not 
<xsl:attribute name="width"><xsl:value-of-select="$length"></xsl:attribute> 

有什么建议?

感谢

+0

您可能需要格式化您的示例代码,使其更易于阅读。点击“编辑”链接,突出显示您的代码示例,然后单击代码格式按钮。 – Filburt 2010-04-18 21:45:39

+0

好问题,但你需要格式化你的代码(我这次为你做了)。 +1。看到我的答案,它提供了两种解决方案,并推荐更好的解决方案。 :) – 2010-04-18 21:58:46

回答

8

<xsl:attribute name="width">$length</xsl:attribute>

这将创建价值字符串$length的属性。但是您想要名为$length的xsl:param的值。

<xsl:attribute name="width"><xsl:value-of-select="$length"></xsl:attribute>

这里<xsl:value-of>元件没有关闭 - 这使得不良好的XML的XSLT代码。

:下面的

使用一个:

  1. <xsl:attribute name="width"><xsl:value-of select="$length"/></xsl:attribute>

  • <someElement width="{$length}"/>
  • 出于可读性和紧凑性倾向于使用2以上,只要有可能。

    +1

    我假设你的意思是xsl:value-of,而不是xsl:value-of-select? :) – markusk 2010-04-19 06:54:27

    +0

    @markusk:感谢您注意到这一点。纠正。 – 2010-04-19 12:52:23

    1

    你可能甚至不需要xsl:attribute在这里;最简单的方法是这样的:

    <someElement width="{$length}" ... >...</someElement> 
    
    1

    您的第一个选择失败,因为变量未在文本节点中展开。您的第二个选择失败,因为您尝试拨打<xsl:value-of-select="...">,而正确的语法是<xsl:value-of select="..."/>,如标准中的Generating Text with xsl:value-of部分所述。您可以通过使用

    <xsl:attribute name="width"><xsl:value-of select="$length"/></xsl:attribute> 
    

    解决您的代码或者,正如其他人指出的那样,你可以使用attribute value templates

    <someElement width="{$length}" ... >...</someElement>