首页 > 编程语言 >c#读取和写入XML文件帮助类

c#读取和写入XML文件帮助类

时间:2023-11-09 11:57:48浏览次数:36  
标签:XML 读取 filePath c# System XElement var using root

一,代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml.Linq;

namespace Common.share.Helper
{
    public static class XmlHelper
    {
        public static int ReadXmlObject<T>(string filePath,string rootName, ref List<T> values) where T : new()
        {
            IList<T> list = new List<T>();
            if (File.Exists(filePath))
            {
                XDocument document = XDocument.Load(filePath);
                XElement root = document.Root;

if (root == null||root.Name!=rootName)
{
return 0;
}

                List<XElement> enumerable = root.Elements().ToList();
                var type = typeof(T);
                PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                foreach (XElement item in enumerable)
                {
                    T _t = Activator.CreateInstance<T>();
                    foreach (var property in properties)
                    {
                        var value = item.Element(property.Name).Value;
                        property.SetValue(_t, value, null);
                    }
                    list.Add(_t);
                    values = list.ToList();
                }
                return list.Count;
            }
            else
            {
                return 0;
            }
        }

        public static int SaveXmlObject<T>(string filePath,string rootName, IList<T> values) where T : class
        {
            XElement root = new XElement(rootName);
            Type type = typeof(T);
            string typeName = typeof(T).Name;
            var properties = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            foreach (var item in values)
            {
                //生成xml文档
                XElement Items = new XElement(typeName);
                foreach (var property in properties)
                {
                    var value = property.GetValue(item,null);
                    Items.SetElementValue(property.Name, value.ToString());
                }
                root.Add(Items);
            }
            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
            root.Save(filePath);
            return 1;
        }
    }
}

 

标签:XML,读取,filePath,c#,System,XElement,var,using,root
From: https://www.cnblogs.com/misakayoucn/p/17819366.html

相关文章

  • 记录一次C++内存泄露的检测过程
    线上游戏长时间运行后,占用内存比以前大很多,发现游戏对象也得变多很多.主程尝试从最近改动过的代码检测,做了小改动,更新上线,内存还是不断增加.我提出用服务端根据聊天做个GM命令,输出当前对象个数信息到日记.更新上线,手动输入gm命令,比较几次日记,方现对象是变多,......
  • Java-Script 编程
    Java-Script编程目录Java-Script编程一.Js概念1.1简介1.2语法结构二.变量使用2.1定义变量2.2定义常量三.数据类型3.1数值类型(number)3.2字符类型(string)3.3.字符类型常用方法3.4布尔值(boolean)3.5null与undefined3.6数组3.7数组常用的方法3.8运算符四.流程......
  • 前端基础之CSS
    前端基础之CSS目录前端基础之CSS一.CSS语法格式二.CSS选择器2.1基本选择器2.2组合选择器2.3属性选择器2.4分组于嵌套2.5伪类选择器hover点击选中2.6伪元素选择器2.7选择器优先级三.CSS属性系列3.1设置长宽3.2字体属性3.3文字属性3.4背景属性3.5背景属性扩展3.6......
  • 打工笔记--------------------------------c#处理ZIP文件帮助类
    一,代码usingSystem;usingSystem.IO;usingICSharpCode.SharpZipLib.Checksums;usingICSharpCode.SharpZipLib.Zip;namespaceHelper{publicclassZipHelper{publicstaticboolZipDirectory(stringfolderToZip,ZipOutputStreamzipStream,str......
  • Lucky Array
    数据结构抽象题法一:总共加\(O(10^9)\)次,我们常数超小的树状数组可以直接拿下!!!(时限4.0s)法二:答案不多,值域不大,我们分块,块记录数出现的次数,然后用tag维护一下增量,注意cnt里的东西和tag没关系,查询才要用到tag。时间复杂度\(O(30N\sqrt{N}=10^9)\),看似没优化,但是实际上当\(d<0\)时......
  • No MyBatis mapper was found in ‘[SpringBoot启动类所在路径]‘ package 原因解析及
    NoMyBatismapperwasfoundin‘[SpringBoot启动类所在路径]‘package原因解析及解决方案NoMyBatismapperwasfoundin'[XXX]'package友情提示:搜到这篇文章的,一般是急于解决这个问题的,看下常见原因排除后,可以忽略分析过程直接看解决方案,我自己出现这个问题的原因主......
  • CRM系统操作难度高,如何避免踩坑?
    虽然大多数的CRM软件都在说自家系统操作简单这个理念,但是“CRM系统操作难度高怎么办”一直是客户常常会抱怨的问题。对于使用者而言系统操作是否容易理解、功能是否直观十分重要,那么如何避免踩坑呢?化繁为简许多企业在前期规划CRM系统时,都准备了复杂的方案,大量的模块、字段自定......
  • docker mqtt搭建
    DockerMQTT搭建教程简介本文将教你如何使用Docker搭建MQTT服务器。首先,我们会介绍整个流程,并用表格展示具体步骤。然后,我们会详细说明每一步需要做什么,并提供相应的代码。流程概览以下是搭建DockerMQTT服务器的步骤概览:步骤 描述1.安装Docker 在主机上安装Docker引擎2.拉取M......
  • 大屏展示技术栈:vue2+echarts+dataV
    1.大屏搭建使用的是dataV组件http://datav.jiaminghi.com/guide,使用dataV组件有如下注意点:a.修改配置项config中data的值,需要重新赋值configb.修改dataV某些内置样式,他有个固定的类2.登录界面动态背景,使用的是vanta.jsVanta.js-Animated3DBackgroundsForYourWebsite......
  • CRM系统管理线索分为几个步骤?
    线索管理是CRM系统的重头戏,这个过程中CRM软件可以对大量的销售线索进行评分分析,并加以培育转化,形成一个个新的销售机会。CRM系统管理线索分为几个步骤?通常我们分为这5个步骤:一、生成线索生成是首要任务,只有盘子做大才会有更多目标客户被我们挖掘出来,除了常见的Excel表格批量导......