• C#操作XML文件


    一 如何在C#里,用代码生成一个XML文件.根据TextBox之类的控件传值进去,不是用项目里的添加XML文件写的.

    使用System.Xml;命名空间,范例代码如下,主要注意的地方是要写入元素时要注意WriteStartElement和WriteEndElement要成对出现,读取可以用XmlReader,其他高级应用

    using (XmlWriter xmlWriter = XmlWriter.Create(xmlPath))

     {

    xmlWriter.WriteStartElement("Book");

    xmlWriter.WriteElementString("Price", "100");

    xmlWriter.WriteEndElement();

    }

    C#如何操作(新建,修改,删除)XML文件?

    已知有一个XML文件(bookstore.xml)如下:
    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
      <book genre="fantasy" ISBN="2-3631-4">
        <title>Oberon's Legacy</title>
        <author>Corets, Eva</author>
        <price>5.95</price>
      </book>
    </bookstore>
     
    1、往<bookstore>节点中插入一个<book>节点:
       XmlDocument xmlDoc=new XmlDocument();
       xmlDoc.Load("bookstore.xml");
       XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
       XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点
       xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
       xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
     
       XmlElement xesub1=xmlDoc.CreateElement("title");
       xesub1.InnerText="CS从入门到精通";//设置文本节点
       xe1.AppendChild(xesub1);//添加到<book>节点中
       XmlElement xesub2=xmlDoc.CreateElement("author");
       xesub2.InnerText="候捷";
       xe1.AppendChild(xesub2);
       XmlElement xesub3=xmlDoc.CreateElement("price");
       xesub3.InnerText="58.3";
       xe1.AppendChild(xesub3);
     
       root.AppendChild(xe1);//添加到<bookstore>节点中
       xmlDoc.Save("bookstore.xml");
    //===============================================
    结果为:
    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
      <book genre="fantasy" ISBN="2-3631-4">
        <title>Oberon's Legacy</title>
        <author>Corets, Eva</author>
        <price>5.95</price>
      </book>
      <book genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
      </book>
    </bookstore>
     
    2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
        XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
       foreach(XmlNode xn in nodeList)//遍历所有子节点
       {
        XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
        if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
        {
         xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”
     
         XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
         foreach(XmlNode xn1 in nls)//遍历
         {
          XmlElement xe2=(XmlElement)xn1;//转换类型
          if(xe2.Name=="author")//如果找到
          {
           xe2.InnerText="亚胜";//则修改
           break;//找到退出来就可以了
          }
         }
         break;
        }
       }
     
       xmlDoc.Save("bookstore.xml");//保存。
    //==================================================
    最后结果为:
    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
      <book genre="fantasy" ISBN="2-3631-4">
        <title>Oberon's Legacy</title>
        <author>Corets, Eva</author>
        <price>5.95</price>
      </book>
      <book genre="update李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>亚胜</author>
        <price>58.3</price>
      </book>
    </bookstore>
     
    3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。
    XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
     
       foreach(XmlNode xn in xnl)
       {
        XmlElement xe=(XmlElement)xn;
        if(xe.GetAttribute("genre")=="fantasy")
        {
         xe.RemoveAttribute("genre");//删除genre属性
        }
        else if(xe.GetAttribute("genre")=="update李赞红")
        {
         xe.RemoveAll();//删除该节点的全部内容
        }
       }
       xmlDoc.Save("bookstore.xml");
    //===========================================
    最后结果为:
    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
      <book ISBN="2-3631-4">
        <title>Oberon's Legacy</title>
        <author>Corets, Eva</author>
        <price>5.95</price>
      </book>
      <book>
      </book>
    </bookstore>
     
    4、显示所有数据。
       XmlNode xn=xmlDoc.SelectSingleNode("bookstore");
     
       XmlNodeList xnl=xn.ChildNodes;
       
       foreach(XmlNode xnf in xnl)
       {
        XmlElement xe=(XmlElement)xnf;
        Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
        Console.WriteLine(xe.GetAttribute("ISBN"));
     
        XmlNodeList xnf1=xe.ChildNodes;
        foreach(XmlNode xn2 in xnf1)
        {
         Console.WriteLine(xn2.InnerText);//显示子节点点文本
        }
       }

    http://www.cnblogs.com/xiaofeixiang/p/4067791.html
    首先来看一个简单的XML文件:
    <?xml version="1.0" encoding="UTF-8"?>
    <Persons>
      <Person id="1">
        <Name>FlyElephant</Name>
        <Age>24</Age>
      </Person>
      <Person id="2">
        <Name>keso</Name>
        <Age>25</Age>
      </Person>
    </Persons>

    这是最常见的Dom形式的XML文件,创建的话也比较简单,代码如下:

    XmlDocument doc = new XmlDocument();
           XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
           doc.AppendChild(dec);
           //根节点 
           XmlElement root = doc.CreateElement("Persons");
           doc.AppendChild(root);
     
           //根节点的添加独立子节点 
           XmlElement person = doc.CreateElement("Person");
           person.SetAttribute("id", "1");
           person.AppendChild(getChildNode(doc, "Name", "FlyElephant"));
           person.AppendChild(getChildNode(doc, "Age", "24"));
           root.AppendChild(person);
     
           //根节点的添加独立子节点 
           person = doc.CreateElement("Person");
           person.SetAttribute("id", "2");
           person.AppendChild(getChildNode(doc, "Name", "keso"));
           person.AppendChild(getChildNode(doc, "Age", "25"));
           root.AppendChild(person);
     
           doc.Save("person.xml");
           Console.WriteLine("创建成功");

    XML文件的读取

    C#中读取XML有三种方式,XmlDocument,XmlTextReader,Linq to Xml,由于本人常用的是XmlDocument方法,其他的方法,有兴趣的可以自己尝试一下,看下查询的实现:

    XmlDocument doc = new XmlDocument();
             doc.Load("person.xml");    //加载Xml文件 
             XmlElement root = doc.DocumentElement;   //获取根节点 
             XmlNodeList personNodes = root.GetElementsByTagName("Person"); //获取Person子节点集合 
             foreach (XmlNode node in personNodes)
             {
                 string id = ((XmlElement)node).GetAttribute("id");   //获取Name属性值 
                 string name = ((XmlElement)node).GetElementsByTagName("Name")[0].InnerText;  //获取Age子XmlElement集合 
                 string age = ((XmlElement)node).GetElementsByTagName("Age")[0].InnerText;
                 Console.WriteLine("编号:" + id + "姓名:" + name + "年龄:" + age);
             }

    XML添加

    XML存放的是数据结果跟类相似,如果业务需要往里面动态添加数据,这个时候也需要个人控制一下,代码如下:

    XmlDocument doc = new XmlDocument();
     doc.Load("person.xml");
     XmlElement root = doc.DocumentElement;
     //根节点的添加独立子节点 
     XmlElement person = doc.CreateElement("Person");
     person.SetAttribute("id", "3");
     person.AppendChild(getChildNode(doc, "Name", "Elephant"));
     person.AppendChild(getChildNode(doc, "Age", "23"));
     root.AppendChild(person);
     doc.Save("person.xml");
     Console.WriteLine("XML文件中节点添加成功");

    这个时候XML文件已经发生变化:

    <?xml version="1.0" encoding="UTF-8"?>
    <Persons>
      <Person id="1">
        <Name>FlyElephant修改</Name>
        <Age>24</Age>
      </Person>
      <Person id="2">
        <Name>keso</Name>
        <Age>25</Age>
      </Person>
      <Person id="3">
        <Name>Elephant</Name>
        <Age>23</Age>
      </Person>
    </Persons>

     XML修改

    修改其中的一个节点的话,最简单的就是遍历,遍历的时候修改自己想要修改的元素:

    XmlDocument doc = new XmlDocument();
             doc.Load("person.xml");    //加载Xml文件 
             XmlElement root = doc.DocumentElement;   //获取根节点 
             XmlNodeList personNodes = root.GetElementsByTagName("Person"); //获取Person子节点集合
             foreach (XmlNode node in personNodes)
             {
                 XmlElement ele = (XmlElement)node;
                 if (ele.GetAttribute("id") == "3")
                 {
                     XmlElement nameEle = (XmlElement)ele.GetElementsByTagName("Name")[0];
                     nameEle.InnerText = nameEle.InnerText + "修改";
                 }
             }
             Console.WriteLine("节点修改成功");
             doc.Save("person.xml");

    当然如果XML文件中内容很多的话,这种方式就显得的不是那么的合理,可以修改一下一上代码

    XmlElement selectEle = (XmlElement)root.SelectSingleNode("/Persons/Person[@id='1']");
    XmlElement nameEle = (XmlElement)selectEle.GetElementsByTagName("Name")[0];
    nameEle.InnerText = nameEle.InnerText + "修改";

    XML删除

    经过上面的操作,删除节点就很简单的,代码如下:

    XmlDocument doc = new XmlDocument();
    doc.Load("person.xml");    //加载Xml文件 
    XmlElement root = doc.DocumentElement;   //获取根节点 
    XmlNodeList personNodes = root.GetElementsByTagName("Person"); //获取Person子节点集合 
    XmlNode selectNode =root.SelectSingleNode("/Persons/Person[@id='1']");
    root.RemoveChild(selectNode);
    Console.WriteLine("节点删除成功");
    doc.Save("person.xml");
  • 相关阅读:
    Finalize,Dispose,SuppressFinalize
    防火防盗防微软,Firefox发布插件自动检测服务
    Nginx的Rewrite设置及示例
    Linux游戏开发包 ClanLib 2.1.0 发布
    HTTP协议详解(真的很经典)
    Linux on POWER:发行版迁移和二进制兼容性考虑事项
    映射网络驱动器VBS脚本
    [笔记] 使用 opcache 优化生产环境PHP
    2020最新版MySQL数据库面试题(三)
    请注意,面试中有这7个行为肯定会被拒绝!
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/4955185.html
Copyright © 2020-2023  润新知