我有一个将XML转换为XLSX的XSLT。正确生成工作簿标记。但问题是,如果文件在.xlsx的第一行没有<?xml version="1.0" encoding="UTF-8"?>
,则无法打开该文件。
尝试通过记事本手动将xml声明添加到xlsx,Excel然后可以打开工作簿。
我尝试将omit-xml-declaration="no"
添加到xslt:output
标记,问题是,浏览器似乎忽略它,在XLSX XML文件之上没有生成xml decleration。
如果浏览器只是忽略omit-xml-declaration属性,我只会通过.NET的XSLT库将XML转换为XLSX。什么是.NET的最新XSLT库?
更新
这是SQL Server的XML功能生成的XML:
data.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<rows>
<row>
<AccountId>G</AccountId>
<AccountName>Great</AccountName>
<AcocuntStatus>Active</AcocuntStatus>
</row>
<row>
<AccountId>N</AccountId>
<AccountName>Nice</AccountName>
<AcocuntStatus>Very Active</AcocuntStatus>
</row>
</rows>
这是将XML转换为Excel文件的XSLT。
Data.xsl :
<xsl:stylesheet version="1.0"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="urn:my-scripts"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" >
<xsl:output method="xml" omit-xml-declaration="no"/>
<xsl:template match="/">
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:apply-templates/>
</Workbook>
</xsl:template>
<xsl:template match="/*">
<Worksheet>
<xsl:attribute name="ss:Name">
<xsl:value-of select="local-name(/*/*)"/>
</xsl:attribute>
<Table x:FullColumns="1" x:FullRows="1">
<Row>
<xsl:for-each select="*[position() = 1]/*">
<Cell><Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</Data></Cell>
</xsl:for-each>
</Row>
<xsl:apply-templates/>
</Table>
</Worksheet>
</xsl:template>
<xsl:template match="/*/*">
<Row>
<xsl:apply-templates/>
</Row>
</xsl:template>
<xsl:template match="/*/*/*">
<Cell><Data ss:Type="String">
<xsl:value-of select="."/>
</Data></Cell>
</xsl:template>
</xsl:stylesheet>