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模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
随机推荐
- python核心编程学习记录之数字
仅用于整数的操作
- linux-exp 工具+小技巧
# 工具篇 # pwntools ,gdb-peda ROPgadget-tool . EDB ## pwntools获取.安装和文档帮助 ## - pwntools: github可以搜索到 htt ...
- jeditable参数详解
一.导入js文件 <script type="text/javascript" src="jquery-1.10.2.min.js"></sc ...
- 理解Linux中断 (1)【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/7425685 版权声明:本文为博主原创文章,未经博主允许不得转载. 一直认为,理解中断是理解内核 ...
- Linux MTD系统剖析【转】
转自:http://blog.csdn.net/lwj103862095/article/details/21545791 版权声明:本文为博主原创文章,未经博主允许不得转载. MTD,Memory ...
- return break continue
return 程序返回,不再执行下面的代码(结束当前的方法 直接返回) break 跳出总上一层循环,不再执行循环(结束当前的循环体)continue 跳出本次循环,继续执行下次循环(结束正在执行的循 ...
- CentOS安装、卸载jdk
安装:http://www.mamicode.com/info-detail-613410.html 卸载:http://sunqiusong.email.blog.163.com/blog/stat ...
- 关于hibernate对应关系之后取值的问题
hibernate对应关系之后取值,比如一对一关系,取不到值,需要检查PO类中是否生成了getter及setter方法.
- 两句话概括“sql外键”
外键的使用就是: 1.外键表可以删除,外键表删完了 才能删主键表2.添加的时候不能添加在主键没有的内容
- jar的下载地址及其使用说明
有时候会苦于jar的搜索.这里我就给出我平时用到的吧,方便大家.后期会不断添加. 1.dom4j-1.6.1.jar 主要用于解析xml的jar包.下载地址: http://pan.baidu.c ...