[转]电子公文数据交换的解决方法

 XML在数据交换中的作用越来越大。在公文无纸化传输中,传输的不仅有文本,还有签名、word文件、其他附件等等,如何将这些二进制文件嵌入XML中进行传输,这里以嵌入一个签名图片为例,做简单介绍。

1.将二进制文件以Base64格式写入XML

        public void InsertFileToXml()
        {
            FileStream fs 
= File.OpenRead("d:\\sign.gif");
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);

            XmlTextWriter writer = new XmlTextWriter("d:\\user.xml",System.Text.Encoding.Default);
            
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();
            writer.WriteStartElement("User");
            writer.WriteElementString("First_Name""John");
            writer.WriteElementString("Last_Name""Wang");

            writer.WriteStartElement("Signature");
            writer.WriteAttributeString("filename","sign.gif");
            writer.WriteBase64(buffer,0,buffer.Length);

            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();
        }


生成后的XML(user.xml)内容如下:

 

 

<?xml version="1.0" encoding="gb2312"?>
<User>
  <First_Name>John</First_Name>
  <Last_Name>Wang</Last_Name>
  <Signature filename="sign.gif">R0lGODlhZAAZAIAAAJ0IDf///yH5BAAAAAAALAAAAABkABkAAAKXjI+py+0Po5y02ouz3rz7D4biSJbmiabqAbQr2sbANL+Ja9WNzDv6qvvlJMKdLVD74WjESJH1HLKQhuSSEoU2FzHGEqdEBmfW5CV7FaepXe3za4YKs1Tp7a2V16t8hZV9h5WhhJZXFSfWdzfGQffQ49OGEDSleOIIQ+mngnk5eWQIKsrVOcpJZpqqWKpKotkq+gp7JKtQAAA7</Signature>
</User>


2.从XML中读取文件

            XmlTextReader reader = new XmlTextReader(@"d:\user.xml");
            while (reader.Read())
            {
                
if (reader.Name == "Signature" && reader.NodeType == XmlNodeType.Element)
                {

                    
byte[] buffer = new byte[1024];
                    int size;

                    FileStream file = File.Create("d:\\" + reader.GetAttribute("filename"));

                    while (true)
                    {
                        size 
= reader.ReadBase64(buffer,0,1024);
                        if (size>0)
                        {
                            file.Write(buffer,
0,size);
                        }
                        else
                        {
                            
break;
                        }
                    }

                    file.Close();
                }

            }
posted @ 2010-07-09 20:21  洛可可  阅读(203)  评论(0编辑  收藏  举报