在.Net 2.0中写入和读取XML文件中的二进制数据

本文关键字:文件 XML 数据 二进制 读取 Net | 更新日期: 2023-09-27 18:22:29

我现在已经准备好了很多关于SO的文章(比如这篇),它们解释了如何使用XMLWriter.WriteBase64方法将二进制数据写入XML。然而,我还没有看到一个解释如何读取base64的数据。是否有其他内置方法?我也很难找到关于这个主题的可靠文档。

这是我正在使用的XML文件:

<?xml version="1.0"?>
<pstartdata>
  <pdata>some data here</pdata>
  emRyWVZMdFlRR0FFQUNoYUwzK2dRUGlBS1ZDTXdIREF ..... and much, much more.
</pstartdata>

创建该文件(.Net 4.0)的C#代码:

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的应用程序读取。事实证明,读取二进制(基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);
                }
            }

为了读取基本64位数据(如上所示),我需要添加什么

在.Net 2.0中写入和读取XML文件中的二进制数据

要从XML读取数据,可以使用XmlReader,特别是ReadContentAsBase64方法。

另一种选择是使用Convert.FromBase64String:

byte[] binaryData;
try 
{
  binaryData = System.Convert.FromBase64String(base64String);
}

注意:您应该查看用于编写的代码——看起来您正在将二进制数据写入pstartdata元素(以及预先写入的pdata元素)。看起来不太对——看看@Yahia的答案。

您似乎编写了一些糟糕的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.WriteBinHexXmlReader.ReadContentAsBinHex。请注意,这些挂件产生的数据比Base64挂件更长。。。