XSLT有没有办法保留xml声明?

时间:2016-06-17 10:24:20

标签: .net xml excel xslt

我有一个将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>

0 个答案:

没有答案