在某个通讯中需要向服务器发送请求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");
}

xml读写文件实例的更多相关文章

  1. XML读写文件辅助类

    /// <summary> /// 历史下载记录xml文件操作 /// </summary> public class XMLHelper { private string x ...

  2. dom4解析xml格式文件实例

    以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX 解析XML文件的几种方式和区别答: Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工 ...

  3. dom4j解析xml格式文件实例

    以下给4种常见的xml文件的解析方式的分析对比: DOM  DOM4J  JDOM  SAX Dom解析    在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次 ...

  4. LayoutInflater作用是将layout的xml布局文件实例化为View类对象。

    获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.L ...

  5. OpenCV FileStorage类读写XML/YML文件

    本文转自:http://www.cnblogs.com/summerRQ/articles/2524560.html 在OpenCV程序中,需要保存中间结果的时候常常会使用.xml / .yml文件, ...

  6. XML结构文件的读写

    附件:http://files.cnblogs.com/xe2011/XML_Writer_And_Read.rar 下面这段代码实现了以下功能 数据保存 textBox1的文本,textBox2的文 ...

  7. OpenCV教程(42) xml/yaml文件的读写

    参考资料: http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html #include "opencv2/openc ...

  8. java IO流文件的读写具体实例(转载)

    引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能 ...

  9. 第9.11节 Python中IO模块文件打开读写操作实例

    为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...

随机推荐

  1. datatables条件判断列显示还是隐藏

    定义一个状态变量status根据条件取值true或者false,然后在datatables参数设置中相应的columns属性的data后面加上"visible":status,该列 ...

  2. SQL SERVER 2008 中三种分页方法与总结

    建立表: CREATE TABLE [TestTable] ( , ) NOT NULL , ) COLLATE Chinese_PRC_CI_AS NULL , ) COLLATE Chinese_ ...

  3. mysql引擎整理

    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引 擎:ISAM.MYISAM和HEAP.另外两种类型I ...

  4. 5.24 Declaring Attributes of Functions【转】

    转自:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 5.24 Declaring Attributes o ...

  5. maven打包异常:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存在

    maven打包异常:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存在 将jre/lib/rt.jar添加到maven的compi ...

  6. Java SE、Java EE和Java ME有什么区别?

    Java现在已不仅仅是一种语言,从广义上说,它代表了一个技术体系.该体系根据应用方向的不同主要分为Java SE.Java EE和Java ME的3个部分. 1998年12月份Sun公司公布的Java ...

  7. SQLServer学习笔记<> 表连接查询----交叉连接、内连接、左连接、右连接

    (1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(S ...

  8. C#:简单线程样例

    1.定义线程类及内部事件 using System; using System.Collections.Generic; using System.Text; using System.Threadi ...

  9. android使用其他应用打开文件

    根据文件的MIME类型来判断,手机中有哪些应用可以打开这个文件,然后把应用在弹窗列表中显示 /** * 打开文件 * * @param file */ public static void openF ...

  10. 【转】介绍设置Session失效的几种方法

    转载地址:http://developer.51cto.com/art/201106/269493.htm Session对象是HttpSessionState的一个实例.该类为当前用户会话提供信息, ...