C#读写xml文件(CSDN-Markdown)
来源:互联网 发布:淘宝联盟数据采集软件 编辑:程序博客网 时间:2024/05/29 04:23
C#读写xml文件
一、要实现的目标
1、xml文件存在时,能正常读写;不存在时,能自动创建xml文件
2、能添加和更新节点。
- 添加:将一个类的实例序列化到xml文件中
- 更新:查找指定的节点,更新节点数据
二、适应场景
本地保存多个用户的登录信息,能对登录信息进行读取和修改。如:
“UserId”保证节点的唯一性。
三、使用的技术
1、xml文件的操作(System.Xml命名空间下类的使用)
2、利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
四、代码
using System;using System.IO;using System.Xml;namespace TestXML{ public class XmlFileManager { private readonly string _fileName; private XmlDocument _xmlDoc; public XmlFileManager(string fileName) { this._fileName = fileName; } /// <summary> /// 创建xml文件 /// </summary> /// <returns>根节点</returns> public XmlNode CreateXml() { _xmlDoc = new XmlDocument(); if (File.Exists(_fileName)) { //返回根节点 _xmlDoc.Load(_fileName); return _xmlDoc.SelectSingleNode("Users"); } else { //创建类型声明节点 var node = _xmlDoc.CreateXmlDeclaration("1.0", "utf-8", ""); _xmlDoc.AppendChild(node); //创建根节点 var rootNode = _xmlDoc.CreateElement("Users"); _xmlDoc.AppendChild(rootNode); //创建文件 try { _xmlDoc.Save(_fileName); } catch (Exception e) { // } return rootNode; } } /// <summary> /// 添加节点 /// </summary> /// <param name="rootNode">根节点</param> /// <param name="name">根节点名称</param> /// <returns></returns> public XmlNode AddXmlNode(XmlNode rootNode, string name) { var node = _xmlDoc.CreateNode(XmlNodeType.Element, name, null); rootNode.AppendChild(node); return node; } /// <summary> /// 添加节点元素 /// </summary> /// <param name="parentNode">父节点</param> /// <param name="obj">类的实例</param> public void AddXmlElement(XmlNode parentNode, object obj) { var t = obj.GetType(); //节点存在,返回 foreach (var pi in t.GetProperties()) { if (pi.Name == "UserId") { var value = pi.GetValue(obj, null).ToString(); if (SearchXmlNode(value) != null) { return; } } } //节点不存在,添加 foreach (var pi in t.GetProperties()) { var node = _xmlDoc.CreateNode(XmlNodeType.Element, pi.Name, null); var value = pi.GetValue(obj, null); if (value == null) { value = ""; } node.InnerText = value.ToString(); parentNode.AppendChild(node); } _xmlDoc.Save(_fileName); } /// <summary> /// 查找指定节点 /// </summary> /// <param name="nodeId">节点唯一标示</param> /// <returns></returns> public XmlNode SearchXmlNode(string nodeId) { var nodes = _xmlDoc.SelectNodes("//UserInfo"); if (nodes != null) { foreach (System.Xml.XmlNode node in nodes) { if (node != null) { var singleNode = node.SelectSingleNode("UserId"); if (singleNode != null) { if (singleNode.InnerText == nodeId) { return singleNode; } } } } } return null; } /// <summary> /// 查找指定元素 /// </summary> /// <param name="nodeId">节点唯一标示</param> /// <param name="elemName">节点名称</param> /// <returns></returns> public XmlNode SearchXmlElement(string nodeId, string elemName) { var nodes = _xmlDoc.SelectNodes("//UserInfo"); if (nodes != null) { foreach (System.Xml.XmlNode node in nodes) { if (node != null) { var singleNode = node.SelectSingleNode("UserId"); if (singleNode != null) { if (singleNode.InnerText == nodeId) { singleNode = node.SelectSingleNode(elemName); if (singleNode != null) { return singleNode; } } } } } } return null; } /// <summary> /// 更新元素数据 /// </summary> /// <param name="nodeId">节点唯一标示</param> /// <param name="elemName">元素名称</param> /// <param name="elemValue">元素值</param> public void UpdateXmlElement(string nodeId, string elemName, string elemValue ) { var node = SearchXmlElement(nodeId, elemName); if (node != null) { node.InnerText = elemValue; _xmlDoc.Save(_fileName); } } }}
五、Demo地址
http://download.csdn.net/detail/afjafjafj2008/8456777
0 0
- C#读写xml文件(CSDN-Markdown)
- c#读写xml文件
- c#读写xml文件
- c#读写xml文件
- C#读写xml文件
- c#读写xml文件
- C#读写xml文件
- c# 读写xml文件
- C#读写xml文件
- C#读写xml文件
- C#读写XML文件
- c#读写xml文件
- C#读写xml文件
- C# 读写XML文件
- c#读写xml文件
- C# 读写XML文件
- c#读写xml文件
- c#读写xml文件
- 随笔(2015.1)
- mac 安装django
- 多边形面积计算公式
- insert into
- Android traceView使用
- C#读写xml文件(CSDN-Markdown)
- CSS3 颜色渐变 gradient
- 双缓冲绘图
- vs2010 asp.net项目中集成ckeditor和ckfinder最简单图文教程
- SQL server 2012 安装教程
- 【CSS】关于position:absolute布局
- CF 518A(Vitaly and Strings-构造)
- TCP连接建立过程中为什么需要“三次握手”
- 在线开发与编译的脚本语言