首页 > 编程语言 >C# XML描述与实例增删改

C# XML描述与实例增删改

时间:2022-12-14 09:33:22浏览次数:53  
标签:XML string C# doc XmlDocument XmlParth 增删 model public

  • 概述
  1. 用于小型项目数据存储,信息传递。系统配置文件等
  • 特点
  1. 必须有根节点(对比HTML)
  2. 标签只能自定义 (对比HTML)
  3. 头声明可有可无建议书写<?xml version="1.0" encoding="utf-8" ?>
  4. 都是成对的标签,并区分大小写(对比HTML)
  5. 特殊字符特殊写法 &lt;< &gt;> &amp;& &apos;* &quot;"
  6. 标签可设置属性
  • 应用实例 基于winform
  1. 描述 小型学生管理软件 实现增删查
  2. 下方为代码
  3. XML文件(数据库)
<?xml version="1.0" encoding="utf-8" ?>
<root>
    <class>
        <student>
            <Id>1</Id>
            <Name>张三</Name>
            <Age>3</Age>
            <Sex>男</Sex>
            <Class>3</Class>
        </student>
        <student>
            <Id>2</Id>
            <Name>李四</Name>
            <Age>4</Age>
            <Sex>女</Sex>
            <Class>3</Class>
        </student>

    </class>
</root>
  • 查询并转换成StudentModel对象
using System.Xml;
string XmlParth = "myxml.xml";
public class StudentModel
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public string Age { get; set; }
        public string Class { get; set; }
    }
  public List<T> GetXmlToModel<T>(T model)
        {
            List<T> result = new List<T>();

            XmlDocument doc = new XmlDocument();
            doc.Load(XmlParth);//根据路径读取文件
            XmlNodeList students = doc.SelectNodes("root/class/student");//再次定位到具体的某个节点
            //以下就是动态的给model绑定查出来的值,并添加到集合
            var type = model.GetType();//获取model所有字段
            //循环学生的所有节点
            foreach (XmlNode node in students)
            {
                T add = System.Activator.CreateInstance<T>();//实例一个新的model对象用于添加到集合
                foreach (System.Reflection.PropertyInfo pro in type.GetProperties())
                {
                    var rre = node.SelectSingleNode(pro.Name);
                    if (rre != null)
                    {   //单条单字段赋值
                        pro.SetValue(add, rre.InnerText.ToString(), null);
                    }
                }
                result.Add(add);
            }
            return result;


        }
//调用
   gridControl1.DataSource = GetXmlToModel(new StudentModel()).OrderBy(a=>a.Id).ToList();
            gridView1.RefreshData();
  • 新增
  //AppendChild添加节点,一层层加
        public string AddXml<T>(T model)
        {
            string result = "";
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(XmlParth);
                XmlNode classNode = doc.SelectSingleNode("root/class");
                XmlElement studentnew = doc.CreateElement("student");
                var type = model.GetType();
                foreach (System.Reflection.PropertyInfo pro in type.GetProperties())
                {
                    XmlElement chele = doc.CreateElement(pro.Name); 
                    chele.InnerText = pro.GetValue(model).ToString();

                    studentnew.AppendChild(chele);//学生下面添加子节点
                } 
                classNode.AppendChild(studentnew);//班级节点下添加学生
                doc.Save(XmlParth);
                return result;
            }
            catch (Exception e)
            {
                return e.Message;
            }
         
           
        }
  • 删除
  //删除遵循从里到外RemoveAll,RemoveChild
        public string DelXml(int Id)
        {
            string str = "";
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(XmlParth);
                XmlNode classNode = doc.SelectSingleNode("root/class");
                XmlNodeList nodes = classNode.ChildNodes;
                foreach (XmlNode re in nodes)
                {
                    if (re.SelectSingleNode("Id").InnerText == Id.ToString())
                    {
                        re.RemoveAll();
                        classNode.RemoveChild(re);
                        doc.Save(XmlParth);
                        str = "";
                        break;
                    }
                }
                return str;
            }
            catch (Exception e)
            {
                return e.Message;
            }
            

        }

 

 

注意:doc.Save()后才生效

标签:XML,string,C#,doc,XmlDocument,XmlParth,增删,model,public
From: https://www.cnblogs.com/hanke123/p/16981181.html

相关文章

  • C#深拷贝有哪些方法实现
    概述为什么要用到深拷贝呢?比如我们建了某个类Person,并且实例化出一个对象,然后,突然需要把这个对象复制一遍,并且复制出来的对象要跟之前的一模一样,来看下我们一般......
  • CommunityToolkit.Mvvm
    publicclassViewModel:ObservableObject{publicViewModel(){ShowCommand=newRelayCommand<string>(Show);}......
  • Docker 安装,常用命令
    安装Docker官方所有操作系统安装教程:InstallDockerEngineonCentOS|DockerDocumentation,其中CentOS安装docker引擎的代码:安装yum-utils,配置库的地址sudoyuminst......
  • Rocky9 在 VMware Workstation 17 Pro 上的安装
    本篇随笔仅记录Rocky9的安装。  镜像下载链接:https://rockylinux.org/download 我选择的版本如图: 我给的配置(本人笔记本CPU是8核16线程,内存32G,给的这个配置......
  • SQL_8_TCL语句
    TCL指的是事务控制语句。  1、事务概论:指一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元。特性:原子性:它是数据库中最小执行......
  • 想要将CADz轴归零?快来试试这几个办法!
    CAD平面图设计过程中,如果有Z坐标可能会带来一系列问题,例如:CAD查询距离不准确,无法倒圆角,无法延伸、无法裁剪……怎么才能将CADz轴归零?本文以浩辰CAD软件为例给大家分享几个......
  • CAD怎么画三维图?通过3D魔方设计实例教会你CAD三维建模!
    CAD怎么画三维图?作为一款研发创新型工业软件,浩辰CAD不仅可以快速、精确地绘制各种二维工程图纸,还可以辅助设计师高效完成3D建模。尤其是在2022版本,浩辰CAD对于3D设计模块做......
  • Spring Cloud架构流程简介
    相对于传统的单体架构,微服务架构引入了太多的概念,让新手有点无可适从。所以,我们要清楚哪些是自身需要的。下面我们分析一下哪些组件是开发一个使用微服务架构的系统所必需......
  • CAD坐标显示不全?无法精准捕捉?你遇到过这些CAD坐标问题吗?
    有些小伙伴在用浩辰CAD看图王查看图纸的过程中,发现会有图纸中CAD坐标显示不全、坐标显示结果和之前不一样以及不能精准捕捉坐标等情况发生,这是为什么呢?本文小编教大家如何......
  • Spring Cloud版本说明和Spring Boot版本选择
    SpringCloud是一个由众多独立子项目组成的大型综合项目,每个子项目有不同的发行节奏,都维护着自己的发布版本号。 SpringCloud通过一个资源清单(BillofMaterial,BOM)来管......