• 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文件,这个就不记录了,上面这些操作会了,遍历就不是问题了。

  • 相关阅读:
    20201009 SpringBoot WebFlux 笔记
    20200930 尚硅谷 Netty【归档】
    20200930 11. 用Netty 自己 实现 dubbo RPC
    如何要注销按钮更加优雅,点击过程 会有友情提示
    浏览器执行代码 是jsp 服务端执行的是<%%>
    细谈getRequestDispatcher()与sendRedirect()的区别
    session.invalidate()
    python中的列表的嵌套与转换
    基于ajax 验证表单是否被占用----------------附:10.25日总结
    如何避免提交页面,信息未填写完善 就出现注册成功提示 基于js
  • 原文地址:https://www.cnblogs.com/grj001/p/12224069.html
Copyright © 2020-2023  润新知