zoukankan      html  css  js  c++  java
  • [转]电子公文数据交换的解决方法

     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();
                    }

                }
  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/monica/p/1774585.html
Copyright © 2011-2022 走看看