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模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
随机推荐
- 验证(Javascript和正则表达式)
昨天写了验证(C#和正则表达式),今天又写了个js版的验证.现在贴出来,为了方便自己查阅,同时也希望能给需要的人帮助和一些启发.由于今天才开始接触js,所以可能会有一些错漏,希望大家能批评指正. va ...
- umask setuid setgid
cat /etc/bashrc if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ];#用户UI ...
- autohotkey-【GUI】Switch between Windows of the Same Application
下面给出了ahk的脚本,但我需要GUI http://superuser.com/questions/435602/shortcut-in-windows-7-to-switch-between-sa ...
- TI CC2541的引脚中断.
- 通过Oracle数据库访问控制功能的方法(Database access control)
修改sqlnet.ora文件中的IP列表后都需要重启监听才能生效.(原文是: Any changes to the values requires the TNS listener to be sto ...
- Linux下命令行安装WebLogic 10.3.6
1.创建用户useradd weblogic;创建用户成功linux系统会自动创建一个和用户名相同的分组,并将该用户分到改组中.并会在/home路径下创建一个和用户名相同的路径,比如我们创建的webl ...
- PostgreSQL Hot Standby的搭建
一. 简介: PG在9.*版本后热备提供了新的一个功能,那就是Stream Replication的读写分离,是PG高可用性的一个典型应用.这个功能在oracle中叫active d ...
- openlayers 学习笔记一
1. 创建地图,加载控件 var map = new OpenLayers.Map("map", { projection: new OpenLayers.Projection(& ...
- WCF自定义地址路由映射(不用svc文件)
一般在创建WCF服务时会用Serivce.svc文件访问,地址如:http://localhost/applicationname/Serivce.svc/Name 现在用路由映射成:http://l ...
- 为Apache配置虚拟机Virtual Host
配置虚拟机最少需要修改两个文件,即httpd-vhosts.conf 和 hosts (记住修改任何配置前先备份哦,这才是个好习惯) 第一步,修改httpd-vhosts.conf文件, 文件路径 \ ...