.net XSLT是否有办法保留xml声明?
我有一个将XML转换为XLSX的XSLT。工作簿标记已正确生成。但是问题是,如果Excel在.xlsx的第一行没有.net XSLT是否有办法保留xml声明?,.net,xml,excel,xslt,.net,Xml,Excel,Xslt,我有一个将XML转换为XLSX的XSLT。工作簿标记已正确生成。但是问题是,如果Excel在.xlsx的第一行没有,它就无法打开该文件 尝试通过记事本将xml声明手动添加到xlsx,然后Excel可以打开工作簿 我尝试将ommit xml declaration=“no”添加到xslt:output标记中,问题是,浏览器似乎忽略了它,在XLSX xml文件上没有生成xml删除 如果浏览器忽略了省略xml声明属性,我将通过.NET的XSLT库将xml转换为XLSX。NET的最新XSLT库是什么 更
,它就无法打开该文件
尝试通过记事本将xml声明手动添加到xlsx,然后Excel可以打开工作簿
我尝试将ommit xml declaration=“no”
添加到xslt:output
标记中,问题是,浏览器似乎忽略了它,在XLSX xml文件上没有生成xml删除
如果浏览器忽略了省略xml声明属性,我将通过.NET的XSLT库将xml转换为XLSX。NET的最新XSLT库是什么
更新
这是SQL Server的XML功能生成的XML:
Data.xml:
G
伟大的
活跃的
N
美好的
非常活跃
这是将XML转换为Excel文件的XSLT
Data.xsl:
是的,在执行xslt转换时,浏览器可能只考虑可显示的输出,但您尝试过不同的浏览器吗?@StefanHegny是的,我尝试了所有浏览器,我通过Inspect元素检查了转换后的XML,生成了所有excel标记,即使使用omit XML-declaration=“否”也缺少XML声明
@Greenletter我不了解您的流程:如何使用浏览器生成转换文件?@michael.hor257k我将此属性添加到XML数据的中,恐怕我仍然不明白。如果我在浏览器中打开data.xml,我会看到:如果我查看页面源代码,我会看到原始xml。如果我使用“Inspect元素”(在某些浏览器中),我可以看到转换后的XML,但我无法将其保存到文件中。是的,可能在执行xslt转换时,浏览器只考虑了可显示的输出,您是否尝试过不同的浏览器?@StefanHegny是的,我尝试了所有浏览器,我通过Inspect元素检查了转换后的XML,所有excel标记都已生成,XML声明丢失,即使使用省略XML-declaration=“no”
@GreenLantern我不理解您的过程:如何使用浏览器生成转换文件?@michael.hor257k我将此属性添加到XML数据的中,恐怕我仍然不明白。如果我在浏览器中打开data.xml,我会看到:如果我查看页面源代码,我会看到原始xml。如果我“检查”元素(在某些浏览器中),我可以看到转换后的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>
<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>