• 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");
            }
    


     

  • 相关阅读:
    flex 内嵌js文件
    LOADRUNNER 录制脚本的问题
    loadrunner windows 2003 添加性能计数器的问题
    其他的网站能上,微软网站不能上是由病毒引起的
    sql express 静默安装的方方法
    javascript 附件事件时带参数的处理方法
    java 面试题 转载
    windows 域共享的问题
    winform listbox 没有listitem的问题
    对象相交检测示例
  • 原文地址:https://www.cnblogs.com/gdjlc/p/3142022.html
Copyright © 2020-2023  润新知