我已经在SO上准备了许多帖子(例如this一个),它解释了如何使用XMLWriter.WriteBase64方法将二进制数据写入XML。但是,我还没有看到一个解释如何读取base64'd数据的方法。还有其他内置方法吗?我也很难找到关于这个主题的可靠文档。
以下是我正在使用的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)数据已被证明是一项挑战。
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);
}
}
我需要添加什么才能读取基础64位数据(如上所示)?
答案 0 :(得分:4)
要从XML读取数据,您可以使用XmlReader
,特别是ReadContentAsBase64
方法。
另一种方法是使用Convert.FromBase64String
:
byte[] binaryData;
try
{
binaryData = System.Convert.FromBase64String(base64String);
}
注意:您应该查看用于编写的代码 - 您似乎正在将二进制数据写入pstartdata
元素(以及事先的pdata
元素)。看起来不太正确 - 请参阅the answer from @Yahia。
答案 1 :(得分:1)
您似乎写了一些不好的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吊灯产生更长的数据...