C# xml文件的创建,修改和添加节点 。

C# xml文件的创建,修改和添加节点

2016年11月15日 17:26:08 luckyone906 阅读数 13533更多

最近在做一个项目,设计到xml文件的传输,所以就研究了一下。

,.NET Framework完全支持XML DOM模式,但它不支持SAX模式。.NET Framework支持两种不同的分析模式:XML DOM分析器(XMLDocument类)和XML阅读器(XMLTextReader类),不支持SAX分析器, 但这并不意味着它没有提供类似SAX分析器的功能。通过XML阅读器可以将SAX的所有的功能很容易的实现及更有效的运用。

但是我们一般运用最多的是DOM。

一、创建xml文件

        using System.Xml;
        using System.IO;//这个一定要写

         XmlDocument xmlDoc = new XmlDocument();
            //加入XML的声明段落,Save方法不再xml上写出独立属性
            xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
           //加入根元素
    
            XmlElement root = xmlDoc.CreateElement("ROOT");
            xmlDoc.AppendChild(root);

            XmlElement memberlist = xmlDoc.CreateElement("MEMBERLIST");
           
            XmlElement memberA = xmlDoc.CreateElement("MEMBER");
            memberA.SetAttribute("AGE", ">=29");
            memberA.SetAttribute("SEX", "MALE");
            XmlElement zs = xmlDoc.CreateElement("NAME");
            zs.InnerText = "张三";
            XmlElement ls = xmlDoc.CreateElement("NAME");
            ls.InnerText = "李四";
            memberA.AppendChild(zs);
            memberA.AppendChild(ls);

            XmlElement memberB = xmlDoc.CreateElement("MEMBER");
            memberB.SetAttribute("AGE", ">=35");
            memberB.SetAttribute("SEX", "MALE");
            XmlElement ww = xmlDoc.CreateElement("NAME");
            ww.InnerText = "王五";
            XmlElement zl = xmlDoc.CreateElement("NAME");
            zl.InnerText = "赵六";
            memberB.AppendChild(ww);
            memberB.AppendChild(zl);

            memberlist.AppendChild(memberA);
            memberlist.AppendChild(memberB);
            root.AppendChild(memberlist);
            xmlDoc.Save(xmlpath);            
       

效果如下:

<?xml version="1.0" encoding="UTF-8"?>

<ROOT>

     <MEMBERLIST>

            <MEMBERAGE=">=29"SEX="MALE">

                      <NAME>李四</NAME>

                 *   <NAME/>                  

         </MEMBER>

            <MEMBERAGE=">=35"SEX="MALE">

                        <NAME>王五</NAME>

                        <NAME>赵六</NAME>

           </MEMBER>

    </MEMBERLIST>

</ROOT>

看上面成功倒是成功了,不过由于粗心,在*这行的NAME标签出错了。我想把第一个NAME改为张三,第二个NAME改为李四

二、修改xml文件
  c#代码如下:

 XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlpath);
            XmlNode memberlist = xmlDoc.SelectSingleNode("ROOT/MEMBERLIST");
            XmlNodeList nodelist=memberlist.ChildNodes;
           // XmlNodeList nodelist=xmlDoc.GetElementsByTagName("MEMBER");
            foreach (XmlNode node in nodelist)
            {
                if (node.Attributes["AGE"].InnerText.ToString().Equals(">=29"))
                {
                    node.ChildNodes[0].InnerText = "张三";
                    node.ChildNodes[1].InnerText = "李四";
                    break;
                }
            }
            xmlDoc.Save(xmlpath);
            MessageBox.Show("保存成功");

xml效果如下:

<?xml version="1.0" encoding="UTF-8"?>

<ROOT>

     <MEMBERLIST>

            <MEMBERAGE=">=29"SEX="MALE">

                      <NAME>张三</NAME>

                      <NAME>李四</NAME>                 

          </MEMBER>

            <MEMBERAGE=">=35"SEX="MALE">

                        <NAME>王五</NAME>

                        <NAME>赵六</NAME>

             </MEMBER>

         </MEMBERLIST>

  </ROOT>

这时候,如果增加人员的情况下,我还需要添加节点。

三、xml文件添加节点如下

c#代码如下

 XmlDocument xmlDoc = new XmlDocument();
            if (File.Exists(xmlpath))
            {
                xmlDoc.Load(xmlpath);
                XmlNode memberlist = xmlDoc.SelectSingleNode("ROOT/MEMBERLIST");
                XmlElement member = xmlDoc.CreateElement("MEMBER");
                member.SetAttribute("AGE", "<29");
                member.SetAttribute("SEX", "MAIL");
                XmlElement lq = xmlDoc.CreateElement("NAME");
                lq.InnerText = "六七";
                member.AppendChild(lq);
                memberlist.AppendChild(member);
                xmlDoc.Save(xmlpath);
                MessageBox.Show("添加成功");
            }
            else
            {
                MessageBox.Show("文件不存在");
            }

效果如下:

<<ROOT>

     <MEMBERLIST>

            <MEMBERAGE=">=29"SEX="MALE">

                     <NAME>张三</NAME>

                     <NAME>李四</NAME>                 

          </MEMBER>

            <MEMBERAGE=">=35"SEX="MALE">

                       <NAME>王五</NAME>

                       <NAME>赵六</NAME>

             </MEMBER>

        <MEMBERAGE="<29" SEX="MALE">

                       <NAME>六七</NAME>

             </MEMBER>

         </MEMBERLIST>

< </ROOT>

 有几点要记住了,XmlNode包含XmlElement,即XmlNode可以转化为XmlElement而XmlElement不可以转化为XmlNode.

xmDoc.selectSingleNode("节点名称").这个节点名称是他的路径。若是根节点当时只写名称就可以了,若是子节点,则需要些明从根节点到它的路径。

再就是遍历xml文件,这个就不记录了,上面这些操作会了,遍历就不是问题了。

原文地址:https://www.cnblogs.com/grj001/p/12224068.html