我有问题。我有一个XML电子表格文件,我试图通过电子邮件发送。所以我转换成二进制文件并将其附加到电子邮件中。问题是当我试图打开它(在Excel上)时,它没有显示我保存的数据。当我像XML文件一样打开它时,我意识到它没有保存XML头:
它的方式应该是:
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
...
<Styles>
...
</Styles>
<Worksheet>
...
</Worksheet></Workbook>
转换后:
<Worksheet>
...
</Worksheet>
我试过使用xmldocument但是我没有工作,我也尝试使用字符串,仍然无法正常工作。
这就是我将XML转换为二进制的方式:
UTF8Encoding encoding = new UTF8Encoding();
binaryFile = encoding.GetBytes(xmlFile);
如何解决此问题? 感谢。
答案 0 :(得分:1)
我认为我们需要有关如何转换XML文件的更多信息。
从您的描述中可以看出,您已将Excel电子表格保存为XML,无论出于何种原因,您都无法将此文本文档附加到电子邮件中。我的猜测是你正在使用一种方法来附加需要字节数组的XML文件,并且不能只提供文件位置。如果您能提供更多相关信息,这将有助于我们找出出错的地方。
我真正坚持的部分是:
我试过使用xmldocument,但我没有工作,我也尝试过 使用字符串,仍然无法正常工作。
你是怎么尝试字符串的?您是否使用FileStream从磁盘读取文件?如果是这样,您应该能够检索文件的全部内容。
您是否一直在使用XmlDocument并尝试XmlDocument.OuterXml?这可能不会为您提供控件头,因为它们不是根节点内的XML主体的一部分。
所以我真的会尝试两件事。首先,如果我在磁盘上有一个XML文件并且需要通过代码将它附加到电子邮件中,我唯一的选择就是提供一个字节数组,我会做类似的事情:
using (FileStream fs = new FileStream("", FileMode.Open, FileAccess.Read))
{
byte[] binaryFile = new byte[fs.Length];
fs.Read(binaryFile, 0, buff.LongLength);
//Copy the byte array to your email object.
}
现在,如果这不是你正在做的事情,你需要提供更多关于你开始的细节(磁盘上的文件?),你需要做什么(发送自动电子邮件?),你有什么限制以及限制潜在解决方案的任何其他信息。
答案 1 :(得分:0)
我发现了我的错误:我没有序列化XML文件,因此在转换后它只显示没有XML标头的数据。所以有两种方法可以解决这个问题: 首先,我们可以将标头与数据字符串连接起来,或者我们可以使用serialize函数。 This is where I've found how to do it。