xml读写文件实例
发布时间:2020-12-16 05:27:01 所属栏目:百科 来源:网络整理
导读:在某个通讯中需要向服务器发送请求xml,格式例子如下: ?xml version="1.0" encoding="UTF-8"?ROOT HEADER TRANNO001/TRANNO /HEADER BODY BATCHY/BATCH TASKLOG APPNO0000000001/APPNO /TASKLOG TASKLOG APPNO0000000002/APPNO /TASKLOG /BODY/ROOT 服务器
在某个通讯中需要向服务器发送请求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"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |