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);

猜你喜欢

转载自www.cnblogs.com/qianj/p/12687387.html