XSLT 转换为 Excel

XSLT Transformation to Excel

我必须将查询结果(xml 格式)转换为 Excel 文件。

查询结果示例:

<?xml version="1.0" encoding="UTF-8"?>
<dbqueries>
<dbquery id="main">
    <rows>
        <row user="Me" user-id="1"/>
        <row user="Myself" user-id="2"/>
        <row user="I" user-id="3"/>
    </rows>
</dbquery>
</dbqueries>

我使用以下 XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet 
version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />   
<xsl:template match="/dbqueries">
    <xsl:processing-instruction name="mso-application">
        <xsl:text>progid="Excel.Sheet"</xsl:text>
    </xsl:processing-instruction>

    <Workbook>  
        <Styles>
            <Style ss:ID="Default" ss:Name="Normal">
                <Alignment ss:Vertical="Bottom" />
                <Borders />
                <Font />
                <Interior />
                <NumberFormat />
                <Protection />
            </Style>
            <Style ss:ID="s21">
                <Font ss:Size="22" ss:Bold="1" />
            </Style>
            <Style ss:ID="s22">
                <Font ss:Size="14" ss:Bold="1" />
            </Style>
            <Style ss:ID="s23">
                <Font ss:Size="12" ss:Bold="1" />
            </Style>
            <Style ss:ID="s24">
                <Font ss:Size="10" ss:Bold="1" />
            </Style>
        </Styles>
        <!-- Write each query -->
        <xsl:for-each select="dbquery">
            <Worksheet ss:Name="{@id}">
                <Table>
                    <xsl:apply-templates select="//rows" mode="rows" />
                </Table>
            </Worksheet>
        </xsl:for-each>
    </Workbook>
</xsl:template>
<xsl:template match="//rows/row" mode="rows">
    <xsl:variable name="x" select="position()" />
    <Row ss:Index="{$x}">
        <Cell ss:Index="1">
            <Data ss:Type="String">
                <xsl:value-of select="@id" />
            </Data>
        </Cell>
        <Cell ss:Index="2">
            <Data ss:Type="String">
                <xsl:value-of select="@user" />
            </Data>
        </Cell>
    </Row>
</xsl:template>

除了第一个字符在转换过程中丢失外,转换有效。

见下文:

Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

可能出了什么问题?

我建议您使用 html 的转换并使用 Datatables (https://datatables.net/) 创建一个 html5 "output to excel" 按钮。获得您想要的结果可能会简单得多。

问题可能已关闭。问题的解决方案是,在使用的框架中,我不得不询问一种结果类型 "application/vnd.ms-excel",而我改为询问 "text/xml"。