xslt 1.0变量问题

时间:2009-10-13 20:25:31

标签: xslt

我有以下模板:

<xsl:template name="theday">
    <xsl:param name="thisday" />

    <xsl:variable name='holiday' select='foo'/><!-- made this static for testing -->

    <td class="{$holiday}"> <!-- no value is inserted in class -->

        <a>
            <xsl:attribute name='href'><xsl:value-of
                select="concat('?date=',$thisday)" /></xsl:attribute>
            <xsl:value-of select="date:day-in-month($thisday)" />
        </a>
    </td>
</xsl:template>

我希望得到这样的HTML:

<td class="foo">
  <a href="?date=2009-11-02">2</a>
</td>

不幸的是,我得到了:

<td class="">
  <a href="?date=2009-11-02">2</a>
</td>

我错过了什么?

2 个答案:

答案 0 :(得分:3)

试试这个:

<xsl:variable name='holiday'>foo</xsl:variable>

<xsl:variable name='holiday' select="'foo'"/>

工作原理:select属性需要评估表达式;因为你可能在上下文中没有foo元素,所以它被解析为空字符串。

答案 1 :(得分:1)

问题是<xsl:variable name='holiday' select='foo'/>选择节点列表'foo'(为空)而不是字符串foo。如果你有xml

<a>
  <foo>B</foo>
</a>

然后(当前位于a<xsl:variable name='holiday' select='foo'/>会给出'B'。

要解决这个问题,请指定一个常量:

<xsl:variable name='holiday' select="'foo'"/>