我已成功地使用xsl模板將帶有數據的簡單xml文件轉換爲另一個xml文件(excel模板)這是我的XSL文件是什麼樣子:在xsl變換後將<?xml version =「1.0」?>添加到xml文件的頂部
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" standalone="yes"/>
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
...(stuff here)...
</xsl:template>
</xsl:stylesheet>
生成的XML文件被正確地寫出但包括
<?xml version="1.0"?>
在文件頂部的除外。我怎樣才能讓它出現在頂部?
目前我生成的XML文件的開頭爲:
<?mso-application progid="Excel.Sheet"?>
...(rest of file)...
但我需要做的是:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
.(rest of file)...
我這樣做變換通過窗戶下面的代碼形式:
XPathDocument myXPathDoc = new XPathDocument(xmlfile);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(xslfile);
XmlTextWriter myWriter = new XmlTextWriter(xmlexcelfile, null);
myWriter.Formatting = Formatting.Indented;
myWriter.Namespaces = true;
myXslTrans.Transform(myXPathDoc, null, myWriter);
myWriter.Close();
我試過玩xsl:output standalone="yes/no"
以及omit-xml-declaration="no"
。我也試過(在C#中)代碼在轉換之前添加myWriter.WriteStartDocument();
,但這是不允許的。我也嘗試在網上搜索這個,並繼續回到standalone="yes"
,但那是行不通的。有什麼我在這裏失蹤?哦,如果你想知道爲什麼我需要有
<?xml version="1.0"?>
在生成的文件的頂部,這是因爲打開使用Excel XML文件時,Excel不能正確識別它,但如果它被包含然後Excel打開它正確...
感謝您的迴應MilkyWayJoe,但我已經嘗試過,現在重試了上面提到的內容,但仍不包括頂部的。你是怎麼做到的? – oUJi
我真的不知道會是什麼原因。這對我有用。你認爲你可以使用'XmlWriter'而不是'XmlTextWriter'嗎?如果可以的話,那麼我會點你這個http://msdn.microsoft.com/en-us/library/system.xml.xsl.xslcompiledtransform.outputsettings.aspx(你可能已經看到) – MilkyWayJoe
天上我真對不起。請注意,我錯誤地添加了'writerSettings.OmitXmlDeclaration = true;'它應該是'false'。你可以嘗試一下,讓我知道嗎?我也會修復答案。 – MilkyWayJoe