如何使用xslt将xml属性转换为表列

时间:2011-11-03 18:08:40

标签: xml xslt

我有一个像这样的xml:

<root> <row col1="value1" col2="value2" ...... coln="valuen"/> <row col1="value1" col2="value2" ...... coln="valuen"/> . . . <row col1="value1" col2="value2" ...... coln="valuen"/> </root>

如何将此属性名称转换为列名称和属性值作为列值?

1 个答案:

答案 0 :(得分:2)

这将起作用,假设每行具有相同数量的属性:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html" />

    <xsl:template match="/root">
        <table>
            <tbody>
                <tr>
                    <xsl:apply-templates select="row[1]" mode="header"/>
                </tr>
                <xsl:apply-templates select="row" mode="rows"/>
            </tbody>
        </table>
    </xsl:template>

    <xsl:template match="row" mode="header">
        <xsl:for-each select="attribute::*">
            <th><xsl:value-of select="local-name(.)" /></th>
        </xsl:for-each>
    </xsl:template>

    <xsl:template match="row" mode="rows">
        <tr>
            <xsl:for-each select="attribute::*">
                <td><xsl:value-of select="." /></td>
            </xsl:for-each>
        </tr>
    </xsl:template>

</xsl:stylesheet>

如果可能有其他属性不代表列值,则需要通过检查名称或其他内容来过滤掉这些属性。