• linq to xml操作XML


    对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容;本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建、加载、增加、查询、修改以及删除。

    1.生成xml文件

            public static void CreateXmlFile(string xmlPath)
            {
                try
                {
                    //定义一个XDocument结构
                    XDocument myXDoc = new XDocument(
                       new XElement("Users",
                           new XElement("User", new XAttribute("ID", "001"),
                               new XElement("name", "张三"),
                               new XElement("password", "1"),
                               new XElement("description", "张三是一个.NET开发工程师")
                               ),
                           new XElement("User", new XAttribute("ID", "002"),
                               new XElement("name", "李四"),
                               new XElement("password", "2"),
                               new XElement("description", "李四是一个Java开发工程师")
                               )
                          )
                   );
                    myXDoc.Save(xmlPath);
                }
                catch (Exception ex)
                {
                   
                }
            }

    生成的XML文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Users>
      <User ID="001">
        <name>张三</name>
        <password>1</password>
        <description>张三是一个.NET开发工程师</description>
      </User>
      <User ID="002">
        <name>李四</name>
        <password>2</password>
        <description>李四是一个Java开发工程师</description>
      </User>
    </Users>

    2.修改xml文件的节点信息

      public static void ModifyXmlNode(string xmlPath)
            {
                try
                {
                    XElement rootNode = XElement.Load(xmlPath);
                    //查询语句: 获取ID属性值等于"001"的所有User节点
                    IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("User")
                                                        where target.Attribute("ID").Value == "001"
                                                        select target;
                  
                    foreach (XElement node in targetNodes)
                    {
                        node.Element("description").SetValue("张三是一个测试工程师");
                    }
                    rootNode.Save(xmlPath);
                }
                catch (Exception ex)
                {
                   
                }
            }

    修改后的XML文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Users>
      <User ID="001">
        <name>张三</name>
        <password>1</password>
        <description>张三是一个测试工程师</description>
      </User>
      <User ID="002">
        <name>李四</name>
        <password>2</password>
        <description>李四是一个Java开发工程师</description>
      </User>
    </Users>

    3.向xml文件添加节点信息

    3.1.末尾添加(Add)

      public static void AddXmlNodeLast(string xmlPath)
            {
                try
                {
                    XElement rootNode = XElement.Load(xmlPath);
                    //定义一个新节点
                    XElement newNode = new XElement("User", new XAttribute("ID", "009"),
                                                                new XElement("name", "小明"),
                                                                new XElement("password", "1"),
                                                                new XElement("description", "小明是一个产品经理"));
                    rootNode.Add(newNode);
                    rootNode.Save(xmlPath);
                }
                catch (Exception ex)
                {
                   
                }
            }

    添加后的XML文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Users>
      <User ID="001">
        <name>张三</name>
        <password>1</password>
        <description>张三是一个测试工程师</description>
      </User>
      <User ID="002">
        <name>李四</name>
        <password>2</password>
        <description>李四是一个Java开发工程师</description>
      </User>
      <User ID="009">
        <name>小明</name>
        <password>1</password>
        <description>小明是一个产品经理</description>
      </User>
    </Users>

    3.2.指定位置增加节点(AddBeforeSelf:在 XNode 前面添加;AddAfterSelf:在 XNode 后面添加)

            public static void AddXmlNode(string xmlPath)
            {
                XElement rootNode = XElement.Load(xmlPath);
                var item = (from ele in rootNode.Elements("User")
                            where ele.Attribute("ID").Value.Equals("002")
                            select ele).SingleOrDefault();
                if (item != null)
                {
                    // 将此新节点添加到指定节点后
                    XElement newNode1 = new XElement("User", new XAttribute("ID", "003"),
                                                            new XElement("name", "小米"),
                                                            new XElement("password", "1"),
                                                            new XElement("description", "小米是一个逗逼"));
                    item.AddAfterSelf(newNode1);
    
                    // 将此新节点添加到指定节点前
                    XElement newNode2 = new XElement("User", new XAttribute("ID", "004"),
                                                           new XElement("name", "王五"),
                                                           new XElement("password", "1"),
                                                           new XElement("description", "王五是一个可爱的人"));
    
                    item.AddBeforeSelf(newNode2);
                    rootNode.Save(xmlPath);
                }
            }

    添加后的XML文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Users>
      <User ID="001">
        <name>张三</name>
        <password>1</password>
        <description>张三是一个测试工程师</description>
      </User>
      <User ID="004">
        <name>王五</name>
        <password>1</password>
        <description>王五是一个可爱的人</description>
      </User>
      <User ID="002">
        <name>李四</name>
        <password>2</password>
        <description>李四是一个Java开发工程师</description>
      </User>
      <User ID="003">
        <name>小米</name>
        <password>1</password>
        <description>小米是一个逗逼</description>
      </User>
      <User ID="009">
        <name>小明</name>
        <password>1</password>
        <description>小明是一个产品经理</description>
      </User>
    </Users>

    4.删除指定xml文件的节点信息

     public static void DeleteXmlNode(string xmlPath)
            {
                try
                {
                    XElement rootNode = XElement.Load(xmlPath);
                    IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("User")
                                                        where target.Attribute("ID").Value.Equals("004")
                                                        select target;
    
                    targetNodes.Remove();
                    rootNode.Save(xmlPath);
                }
                catch (Exception ex)
                {
                }
            }

    删除后的XML文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Users>
      <User ID="001">
        <name>张三</name>
        <password>1</password>
        <description>张三是一个测试工程师</description>
      </User>
      <User ID="002">
        <name>李四</name>
        <password>2</password>
        <description>李四是一个Java开发工程师</description>
      </User>
      <User ID="003">
        <name>小米</name>
        <password>1</password>
        <description>小米是一个逗逼</description>
      </User>
      <User ID="009">
        <name>小明</name>
        <password>1</password>
        <description>小明是一个产品经理</description>
      </User>
    </Users>

     5.XML属性新增、修改和删除

    XElement rootNode = XElement.Load(xmlPath);
    IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("User")
           where target.Attribute("ID").Value.Equals("004")
           select target;
    // 修改属性
    newNode.Add(new XAttribute("Sex", ""));
    // 修改属性
    newNode.SetAttributeValue("ID", "008");
    // 删除属性
    newNode.Attribute("Sex").Remove();
    rootNode.Save(xmlPath);
  • 相关阅读:
    文件上传之前先进行预览
    代码规范
    ESLint 配置文件 .eslintrc 示例及说明
    JQ ajax全局事件 (个人学习笔记)
    JQ ajax (个人学习笔记)
    js 滚动加载图片(懒加载)实现原理 (个人学习笔记)
    js 正则 (个人学习笔记)
    js 理解闭包 (个人学习笔记)
    js 改变this指向的几种方法(个人学习笔记)
    js 理解this指向(个人学习笔记)
  • 原文地址:https://www.cnblogs.com/qianj/p/12687387.html
Copyright © 2020-2023  润新知