我已经在 SO 上准备了许多帖子(例如 this one),它们解释了如何使用 XMLWriter.WriteBase64 方法将二进制数据写入 XML。但是,我还没有看到解释如何读取 base64 数据的内容。是否有另一种内置方法?我也很难找到有关该主题的可靠文档。
这是我正在使用的 XML 文件:
<?xml version="1.0"?>
<pstartdata>
<pdata>some data here</pdata>
emRyWVZMdFlRR0FFQUNoYUwzK2dRUGlBS1ZDTXdIREF ..... and much, much more.
</pstartdata>
创建该文件的 C# 代码 (.Net 4.0):
FileStream fs = new FileStream(Path.GetTempPath() + "file.xml", FileMode.Create);
System.Xml.XmlTextWriter w = new System.Xml.XmlTextWriter(fs, null);
w.Formatting = System.Xml.Formatting.None;
w.WriteStartDocument();
w.WriteStartElement("pstartdata");
#region Main Data
w.WriteElementString("pdata", "some data here");
// Write the binary data
w.WriteBase64(fileData[1], 0, fileData[1].Length);
#endregion (End) Main Data (End)
w.WriteEndDocument();
w.Flush();
fs.Close();
现在,真正的挑战...
好的,所以你们都可以看到上面是用 .Net 4.0 编写的。不幸的是,XML 文件需要由使用 .Net 2.0 的应用程序读取。读取二进制(base 64)数据已被证明是一个相当大的挑战。
读取 XML 数据的代码 (.Net 2.0):
System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
xDoc.LoadXml(xml_data);
foreach (System.Xml.XmlNode node in xDoc.SelectNodes("pstartdata"))
{
foreach (System.Xml.XmlNode child in node.ChildNodes)
{
MessageBox.Show(child.InnerXml);
}
}
为了读入 base 64'd 数据(如上所示),我需要添加什么?
最佳答案
您似乎写了一些糟糕的 XML - 使用以下内容写入数据:
w.WriteStartDocument();
w.WriteStartElement("pstartdata");
#region Main Data
w.WriteElementString("pdata", "some data here");
// Write the binary data
w.WriteStartElement("bindata");
w.WriteBase64(fileData[1], 0, fileData[1].Length);
w.WriteEndElement();
#endregion (End) Main Data (End)
w.WriteEndDocument();
w.Flush();
fs.Close();
为了阅读,您将不得不使用
XmlReader.ReadContentAsBase64
。正如您要求使用其他方法来写入和读取二进制数据 - 有
XmlTextWriter.WriteBinHex
和 XmlReader.ReadContentAsBinHex
。请注意,这些产生的数据比它们的 Base64 挂件更长......关于c# - 在 .Net 2.0 中写入和读取 XML 文件中的二进制数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9153403/