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");
}
xml读写文件实例的更多相关文章
- XML读写文件辅助类
/// <summary> /// 历史下载记录xml文件操作 /// </summary> public class XMLHelper { private string x ...
- dom4解析xml格式文件实例
以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX 解析XML文件的几种方式和区别答: Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工 ...
- dom4j解析xml格式文件实例
以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次 ...
- LayoutInflater作用是将layout的xml布局文件实例化为View类对象。
获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.L ...
- OpenCV FileStorage类读写XML/YML文件
本文转自:http://www.cnblogs.com/summerRQ/articles/2524560.html 在OpenCV程序中,需要保存中间结果的时候常常会使用.xml / .yml文件, ...
- XML结构文件的读写
附件:http://files.cnblogs.com/xe2011/XML_Writer_And_Read.rar 下面这段代码实现了以下功能 数据保存 textBox1的文本,textBox2的文 ...
- OpenCV教程(42) xml/yaml文件的读写
参考资料: http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html #include "opencv2/openc ...
- java IO流文件的读写具体实例(转载)
引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能 ...
- 第9.11节 Python中IO模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
随机推荐
- android 项目学习随笔十八(三级缓存)
xUtils的BitmapUtils模块用的就是三级缓存,在项目中尽量还是应用BitmapUtils 三级缓存(机制) import com.itheima.zhsh66.R; import andr ...
- vsftp不同帐号的目录和权限
搭建FTP服务器,供虚拟用户使用,实现不同用户具有不同家目录和权限. 1.用户peter的家目录为/var/ftp/vuserdir/peter,他只有下载权限,没有其他权限(创建目录.重命名.删除. ...
- 161117、使用spring声明式事务抛出 identifier of an instance of
今天项目组有成员使用spring声明式事务出现下面异常,这里跟大家分享学习下. 异常信息: org.springframework.orm.hibernate3.HibernateSystemExce ...
- [转]AngularJS的$resource
转自:http://blog.csdn.net/violet_day/article/details/17403207 $http $http服务是基于$q服务的,提供了promise封装,它接受一个 ...
- PDA调用WCF服务引用
在 http://www.cnblogs.com/yiping06993010/archive/2009/11/01/1593912.html 中,的作者提到使用NetCFSvcUtil.exe生成代 ...
- linux,shell输入反斜杠显示'W'。
linux,shell输入反斜杠显示'W'. solution: 字体必须为"Courier New".
- MyISAM表杂记实验
一.本文说明 由于刚学mysql所以动手做了一些实验. 二.实验内容 1.验证MyISAM有AUOT_INCREMENT coloumn功能 ----在这里是对现有表t,增加一个主键----mysql ...
- .Net额外小工具
http://blog.csdn.net/zhumi/article/details/49076 用于编写单元测试的 NUnit用于创建代码文档资料的 NDoc用于生成解决方案的 NAnt用于生成代码 ...
- Redis 安装 启动 连接 配置 重启
Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# .tar.gz ]# cd redis- ]# ma ...
- 使用ResourceBundle访问资源文件(properties)帮助类
import java.util.ResourceBundle; /** * 读取properties文件的帮助类 * @author */ public class PropertiesUtil { ...