将XSLT转换为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">
什么可能出错?
问题可能会被closures。 问题的解决scheme是,在使用的框架中,我不得不问一个types的结果“application / vnd.ms-excel”,而我问“text / xml”。
我build议你使用HTML转换,并使用Datatables( https://datatables.net/ )来创build一个HTML5“输出到Excel”button。 得到你想要的结果可能会简单得多。