Использование XSLT / XML для генерации стилей для тегов HTML? (XSL: атрибут-набор) - PullRequest
3 голосов
/ 23 февраля 2011

Хорошо, это был тяжелый час или около того ... У меня проблемы с генерацией ячеек таблицы с различной шириной. Я использую 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>

Есть ли способ сгенерировать тег HTML, используя данные XML для их стилизации?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2011

Больше стиля 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>
3 голосов
/ 23 февраля 2011

Вместо xsl: attribute-set вам необходимо добавить xsl: attribute внутри элемента <td>:

<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>
...