网站首页
网站导航
Ctrl+D收藏
首 页
代码段
源码包
文档库
工具箱
代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C#
】
操作xml添加删除修改读取
作者:
泳臻
/ 发布于
2016/5/26
/
647
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Xml; using System.IO; using System.Xml.Serialization; namespace Common { public class ConvertXml<T> { private string Xmlpath = string.Empty; private string Xmlroot = string.Empty; private XmlDocument xml = null; private XmlNode rootnode = null; private MemberInfo minfo; private StreamWriter st; private List<T> list = new List<T>(); private XmlKeyAttribute xmlKeyAtt ; private XmlSerializer serializer = new XmlSerializer(typeof(List<T>)); private T t; /// <summary> /// 构造函数默认加载xml模板物理路径 /// </summary> /// <param name="Xmlpath">xml模板物理路径</param> /// <param name="T">XML所对应实体类</param> public ConvertXml(T tmodel, string Xmlpath = "") { this.Xmlpath = Xmlpath; xml = new XmlDocument(); if (!string.IsNullOrEmpty(Xmlpath)) { if (!File.Exists(Xmlpath)) { // st = new StreamWriter(Xmlpath); // File.Create(Xmlpath); using (FileStream fs = new FileStream(Xmlpath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { list.Add(tmodel); serializer.Serialize(fs, list); // st.Close(); fs.Close(); fs.Dispose(); } } else { try { // st = new StreamWriter(Xmlpath); xml.Load(Xmlpath); minfo = typeof(T); xmlKeyAtt = Attribute.GetCustomAttribute(minfo, typeof(XmlKeyAttribute)) as XmlKeyAttribute; rootnode = xml.SelectSingleNode(xmlKeyAtt.Rootauthor); } catch (Exception e) { throw; } } } this.t = tmodel; } /// <summary> /// 装载到xml中 /// </summary> /// <returns></returns> public bool InsertXml() { bool save = true; try { Hashtable ht = this.setHt(); XmlElement xmlEle = xml.CreateElement(Xmlroot); foreach (DictionaryEntry item in ht) { XmlElement idxml = xml.CreateElement(item.Key.ToString()); idxml.InnerText = item.Value == null ? "" : item.Value.ToString(); xmlEle.AppendChild(idxml); } rootnode.AppendChild(xmlEle); } catch (Exception e) { save = false; } finally { save = false; } xml.Save(Xmlpath); return save; } /// <summary> /// 反射当前对象序列化到对象中 /// </summary> /// <returns></returns> private Hashtable setHt() { Hashtable ht = new Hashtable(); Type modelType = t.GetType(); Xmlroot = modelType.Name; try { foreach (PropertyInfo item in modelType.GetProperties()) { ht.Add(item.Name, item.GetValue(t, null)); } } catch (Exception e) { throw; } return ht; } /// <summary> /// 反序列化xml配置文件 /// </summary> /// <returns></returns> public List<T> getModel() { StreamReader strr = new StreamReader(Xmlpath); XmlSerializer serializer = new XmlSerializer(typeof(List<T>)); this.list = (List<T>)serializer.Deserialize(strr); strr.Close(); strr.Dispose(); return list; } /// <summary> /// 修改一个xml节点值 /// </summary> /// <returns></returns> public bool UpdateModel(ref ValidationErrors err) { bool save = true; XmlNodeList nodelist = rootnode.ChildNodes; Type modelType = t.GetType(); System.Reflection.PropertyInfo propertyInfo = modelType.GetProperty(xmlKeyAtt.Author); string tempID = propertyInfo.GetValue(t, null) == null ? "" : propertyInfo.GetValue(t, null).ToString(); try { foreach (XmlNode item in nodelist) { XmlElement xe = item as XmlElement; if (xe != null) { foreach (PropertyInfo itemModel in modelType.GetProperties()) { if (xe[xmlKeyAtt.Author].InnerText == tempID) { xe[itemModel.Name].InnerText = itemModel.GetValue(t, null) == null ? "" : itemModel.GetValue(t, null).ToString(); } } } } } catch (Exception e) { err.Add(e.ToString()); save=false; } xml.Save(Xmlpath); return save; } /// <summary> /// 删除一个节点 /// </summary> /// <returns></returns> public bool DeleteModel() { bool save = true; XmlNodeList nodelist = rootnode.ChildNodes; Type modelType = t.GetType(); System.Reflection.PropertyInfo propertyInfo = modelType.GetProperty(xmlKeyAtt.Author); string tempID = propertyInfo.GetValue(t, null) == null ? "" : propertyInfo.GetValue(t, null).ToString(); try { foreach (XmlNode item in nodelist) { XmlElement xe = item as XmlElement; if (xe != null) { if (xe[xmlKeyAtt.Author].InnerText == tempID) { rootnode.RemoveChild(item); } } } } catch (Exception e) { save = false; } xml.Save(Xmlpath); return save; } } } xml 对象属性 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Common { [AttributeUsage(AttributeTargets.Class)] public class XmlKeyAttribute:Attribute { private string _author; private string _Rootauthor; public XmlKeyAttribute(string _rootauthor, string author="id") { _author = author; _Rootauthor=_rootauthor; } public string Author { get { return _author; } } public string Rootauthor { get { return _Rootauthor; } } } } xml 案例对象 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; namespace Common { [Serializable] [XmlRoot("ArrayOfRviewModel")]//xml的根节点ArrayOf+类名 [XmlKey("ArrayOfRviewModel", "ID")]//相当于主键字段 添加删除修改会使用到 public class RviewModel { public string ID { get; set; } public string Name { get; set; } /// <summary> /// 执行方式 /// </summary> public string Sql { get; set; } /// <summary> /// 执行内容 /// </summary> public string Content { get; set; } } } 查询 修改 。。 //创建xml RviewModel model = new RviewModel(); //对象赋值 model.id=1;model.name=2; string paht = Server.MapPath("~/XRviewConfig/RviewModel.xml"); if (!System.IO.File.Exists(paht)) { Common.ConvertXml<RviewModel> xml = new ConvertXml<RviewModel>(model, paht); } else { Common.ConvertXml<RviewModel> xml = new ConvertXml<RviewModel>(model, paht); xml.InsertXml(); var item = xml.getModel(); } //查询单个对象 string paht = Server.MapPath("~/XRviewConfig/RviewModel.xml"); RviewModel model = new RviewModel(); Common.ConvertXml<RviewModel> xml = new ConvertXml<RviewModel>(model, paht); model = xml.getModel().Where(o => o.ID == id).First(); //修改 Common.ConvertXml<RviewModel> xml = new ConvertXml<RviewModel>(model, paht); xml.UpdateModel(ref validationErrors); if (validationErrors != null && validationErrors.Count > 0) { validationErrors.All(a => { returnValue += a.ErrorMessage; return true; }); } //删除 string[] deleteId = new String []; string paht = Server.MapPath("~/XRviewConfig/RviewModel.xml"); RviewModel model = new RviewModel(); Common.ConvertXml<RviewModel> xml = new ConvertXml<RviewModel>(model, paht); foreach (var item in deleteId) { model = xml.getModel().Where(o => o.ID == item).First(); Common.ConvertXml<RviewModel> tempxml = new ConvertXml<RviewModel>(model, paht); if (deleteId != null && deleteId.Length > 0) { if (tempxml.DeleteModel()) { LogClassModels.WriteServiceLog(Suggestion.DeleteSucceed + ",信息的Id为" + string.Join(",", deleteId), "消息" );//删除成功,写入日志 return Json("OK"); } else { if (validationErrors != null && validationErrors.Count > 0) { validationErrors.All(a => { returnValue += a.ErrorMessage; return true; }); } LogClassModels.WriteServiceLog(Suggestion.DeleteFail + ",信息的Id为" + string.Join(",", deleteId) + "," + returnValue, "消息" );//删除失败,写入日志 } } } 错误集合 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Common { /// <summary> /// 验证错误 /// </summary> public class ValidationError { public ValidationError() { } public string ErrorMessage { get; set; } } /// <summary> /// 多个验证错误的集合 /// </summary> public class ValidationErrors : List<ValidationError> { public void Add(string errorMessage) { base.Add(new ValidationError { ErrorMessage = errorMessage }); } } }
评论列表
本站所提供的代码,版权归原作者所有,若有侵犯作者版权,请与我们联系,我们将立即删除或修改。谢谢!
本站所有代码发布及提供者。
试试其它关键字
同语言下
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
.
计算每周和每月固定日期
可能有用的
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
.
计算每周和每月固定日期
泳臻
贡献的其它代码
(
24
)
.
CRC8校验
.
EasyUI--datebox设置默认时间
.
删除已存在表
.
数字累计
.
修改本机时间及获取硬盘序列号
.
SP相关
.
意图相关
.
实现键盘上下左右键选择文字并显示在文本框
.
select美化自定义下拉框样式
.
调用手机拍照功能
地图
本站
我们
服务
版权
联系
回馈
博客