使用XSLT / XML为HTML标签生成样式? (XSL:属性集)

时间:2011-02-23 11:22:12

标签: css xslt attributes stylesheet parent-child

好吧,这是一个艰难的时刻......我在制作具有不同宽度的表格单元时遇到了困难。我正在使用XML / XSLT来吐出我的HTML,所以宽度基本上以XML格式存储:

<size>
<width1>5</width1>
<width2>4</width2>
<width3>7</width3>
</size>

使用XSLT的属性集我应该有一个表行和分别为5px,4px,7px宽度的单元格。但是,问题在于attribute-set需要成为<xsl:stylesheet>的孩子才能发挥作用。我不能这样做:(原谅丢失的px)

<tr>
    <td>
        <xsl:attribute-set name="style">
            <xsl:attribute name="width"><xsl:value-of select="size/width1"/></xsl:attribute>
        </xsl:attribute-set>
    </td>
    <td>
        <xsl:attribute-set name="style">
            <xsl:attribute name="width"><xsl:value-of select="size/width2"/></xsl:attribute>
        </xsl:attribute-set>
    </td>
    <td>
        <xsl:attribute-set name="style">
            <xsl:attribute name="width"><xsl:value-of select="size/width3"/></xsl:attribute>
        </xsl:attribute-set>
    </td>
</tr>

有没有办法使用XML数据生成html标签来设置样式?

2 个答案:

答案 0 :(得分:3)

您需要在<td>元素中添加 xsl:attribute ,而不是 xsl:attribute-set

<xsl:template match="size">
    <tr>
        <td>
            <xsl:attribute name="width">
                <xsl:value-of select="./width1"/>
            </xsl:attribute>
        </td>

        <td>
            <xsl:attribute name="width">
                <xsl:value-of select="./width2"/>
            </xsl:attribute>
        </td>

        <td>
            <xsl:attribute name="width">
                <xsl:value-of select="./width3"/>
            </xsl:attribute>
        </td>
    </tr>
</xsl:template>

答案 1 :(得分:3)

更多XSLT风格:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="size">
        <table>
            <tr>
                <xsl:apply-templates/>
            </tr>
        </table>
    </xsl:template>
    <xsl:template match="size/*">
        <td style="width:{.}px;">
            <!-- Do stuff -->
        </td>
    </xsl:template>
</xsl:stylesheet>

应用于您的样本结果将是:

<table>
    <tr>
        <td style="width:5px;"></td>
        <td style="width:4px;"></td>
        <td style="width:7px;"></td>
    </tr>
</table>