zoukankan      html  css  js  c++  java
  • xml读写文件实例

    在某个通讯中需要向服务器发送请求xml,格式例子如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <ROOT>
      <HEADER>
        <TRANNO>001</TRANNO>   
      </HEADER>
      <BODY>
        <BATCH>Y</BATCH>
        <TASKLOG>
          <APPNO>0000000001</APPNO>
        </TASKLOG>
        <TASKLOG>
          <APPNO>0000000002</APPNO>
        </TASKLOG>
      </BODY>
    </ROOT>
    

     服务器反馈信息如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <ROOT>
      <HEADER>
        <TRANNO>001</TRANNO>   
      </HEADER>
      <BODY>
        <BATCH>Y</BATCH>
        <TASKLOG>
          <APPNO>0000000001</APPNO>   
          <STATUS>001</STATUS>
        </TASKLOG>
        <TASKLOG>
          <APPNO>0000000002</APPNO>     
          <STATUS>002</STATUS>
        </TASKLOG>
      </BODY>
    </ROOT>
    

    1、创建xml节点头的实体类、请求实体类、接收实体类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace XXYYZZ
    {
        public abstract class Header
        {
            /// <summary>
            /// 交易号
            /// </summary>
            public string Tranno { get; set; }
            /// <summary>       
            /// 是否批:Y是 N否
            /// </summary>
            public string Batch { get; set; }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace XXYYZZ
    {
        public class ReqTasklog : Header
        {
            public List<ReqTasklogBody> ReqTasklogBodyList;
        }
    
        public class ReqTasklogBody
        {
            /// <summary>
            ///申请编号
            /// </summary>        
            public string Appno { get; set; }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace XXYYZZ
    {
        public class RspTasklog : Header
        {
            public List<RspTasklogBody> rspTasklogBodyList;
        }
    
        public class RspTasklogBody
        {
            /// <summary>
            ///申请编号
            /// </summary>        
            public string Appno { get; set; }
           
            /// <summary>
            /// 状态
            /// </summary>
            public string Status { get; set; }
        }
    }
    

    2、创建一个生成xml头节点的类XmlHeader

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    
    namespace XXYYZZ
    {
        public class XmlHeader
        {
            /// <summary>
            /// 头节点
            /// </summary>
            /// <param name="model"></param>
            /// <param name="doc"></param>
            /// <returns></returns>
            public XmlElement CreateHeaderNode(Header model,XmlDocument doc)
            {
                XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                doc.AppendChild(dec);
                XmlElement root = doc.CreateElement("ROOT");
                doc.AppendChild(root);
                //头节点
                XmlElement header = doc.CreateElement("HEADER");
                root.AppendChild(header);
                header.AppendChild(CreateNode(doc, "TRANNO", model.Tranno));
               
                //内容节点
                XmlElement body = doc.CreateElement("BODY");
                root.AppendChild(body);
    
                return body;
            }
            /// <summary>
            /// 创建节点
            /// </summary>
            /// <param name="doc"></param>
            /// <param name="name"></param>
            /// <param name="value"></param>
            /// <returns></returns>
            public XmlElement CreateNode(XmlDocument doc, string name, string value)
            {
                XmlElement element = doc.CreateElement(name);
                element.InnerText = value;
                return element;
            }
        }
    }
    

    3、创建一个将实体转为XML的类ModelToXml,继承XmlHeader

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    
    namespace XXYYZZ
    {
        public class ModelToXml : XmlHeader
        {     
            /// <summary>
            /// 请求查询XX状态
            /// </summary>
            /// <param name="model"></param>
            /// <param name="fullFileName"></param>
            public void ReqTasklogSave(ReqTasklog model, string fullFileName)
            {
                XmlDocument doc = new XmlDocument();
                XmlElement body = CreateHeaderNode(model, doc);
                //是否批量          
                string batchValue = model.ReqTasklogBodyList.Count > 1 ? "Y" : "N";
                body.AppendChild(CreateNode(doc, "BATCH", batchValue));
                           
                foreach (ReqTasklogBody reqTasklogBody in model.ReqTasklogBodyList)
                {
                    XmlElement bodyLoanapp = doc.CreateElement("TASKLOG");
                    body.AppendChild(bodyLoanapp);
                    bodyLoanapp.AppendChild(CreateNode(doc, "APPNO", reqTasklogBody.Appno));
                }
             
                doc.Save(fullFileName);
            }   
        }
    }
    

    测试:

     private void button2_Click(object sender, EventArgs e)
            {
                ReqTasklog model = new ReqTasklog()
                {
                    Tranno = "001",               
                    ReqTasklogBodyList = new List<ReqTasklogBody>()
                    {
                        new ReqTasklogBody()
                        {
                            Appno = "0000000001"
                        },
                        new ReqTasklogBody()
                        {
                            Appno = "0000000002"
                        }
                    }
                };
                string filename = "ReqTasklog.xml";
                ModelToXml createXml = new ModelToXml();
                createXml.ReqTasklogSave(model, filename);
            }
    

    4、创建一个将xml转为实体的类GetRspTasklog

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.IO;
    
    namespace XXYYZZ
    {
        public class XmlToModel
        {
            public RspTasklog GetRspTasklog(string filepath)
            {
                RspTasklog model = new RspTasklog();
                XmlDocument xDoc = new XmlDocument();
                using (StreamReader sr = new StreamReader(filepath, Encoding.UTF8))
                {
                    xDoc.Load(sr);
    
                    model.Tranno = GetNodeText(xDoc, "//TRANNO");               
                    model.Batch = GetNodeText(xDoc, "//BATCH");
    
                    model.rspTasklogBodyList = new List<RspTasklogBody>();
                    XmlNodeList nodeList = xDoc.SelectNodes("/ROOT/BODY/TASKLOG");
                    foreach (XmlNode node in nodeList)
                    {
                        RspTasklogBody body = new RspTasklogBody()
                        {
                             Appno = node["APPNO"].InnerText,                        
                             Status = node["STATUS"].InnerText
                        };
                        model.rspTasklogBodyList.Add(body);
                    }              
                }
                return model;
            }
    
            private string GetNodeText(XmlDocument xDoc, string xpath)
            {
                XmlNode xNode = xDoc.SelectSingleNode(xpath);
                return (xNode != null) ? xNode.InnerText : "";             
            }       
        }
    }
    

    测试:

    private void button5_Click(object sender, EventArgs e)
            {
                XmlToModel getxml = new XmlToModel();
                RspTasklog model = getxml.GetRspTasklog("RspTasklog.xml");
            }
    


     

  • 相关阅读:
    题目1009:二叉搜索树
    腾讯云API 生成Authentication Header加密字符串 C#代码示例
    《神经网络与深度学习》
    《神经网络与深度学习》第一章 使用神经网络来识别手写数字(三)- 用Python代码实现
    Rust语言的多线程编程
    C# DataTable的Select()方法不支持 != 判断
    《神经网络与深度学习》第一章 使用神经网络来识别手写数字(二)- 用梯度下降来训练学习
    C# 对多个文件进行zip压缩
    《神经网络与深度学习》:第一章 使用神经网络来识别手写数字(一)
    谷歌浏览器如何查看或获取Cookie字符串
  • 原文地址:https://www.cnblogs.com/gdjlc/p/3142022.html
Copyright © 2011-2022 走看看