验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

C#读写xml文件的方法是什么

阅读:1176 来源:乙速云 作者:代码code

C#读写xml文件的方法是什么

      C#写入xml文件

      1、XmlDocument

      1。我认为是最原始,最基本的一种:利用XmlDocument向一个XML文件里写节点,然后再利用XmlDocument保存文件。
      首先加载要写入的XML文件,但是如果没有的,就要新建,在新建的过程中,要有写入的代码;

      XmlDocument doc = new XmlDocument();
                  try
                  {
                      doc.Load("new.xml");
                  }
                  catch
                  {
                      XmlTextWriter xtw = new XmlTextWriter("new.xml", Encoding.UTF8);
                      //新建XML文件        
                      xtw.WriteStartDocument();
                      xtw.WriteStartElement("gnode");
                      // gnode根节点                 
                      xtw.WriteStartElement("myxm1");
                      // gnode根节点下的元素myxmls             
                      xtw.WriteEndElement();
                      xtw.WriteEndElement();
                      xtw.WriteEndDocument();
                      xtw.Close();
                      doc.Load("new.xml");
                  }
                  XmlNode xn = doc.DocumentElement;
                  //找到根节点     
                  XmlElement xe = doc.CreateElement("myxml2");
                  //在根节点下创建元素,如果是属性,则用XmlAttribute; 
                  xe.InnerText = "薪薪代码hahaha";
                  //给子节点写入文本节点(值)     
                  xn.AppendChild(xe);
                  //根节点将其纳入         
                  doc.Save("new2.xml");
                  //利用XmlDocument保存文件
              }

      注意点:在新建根节点的时候,WriteStartElement,只能嵌套,也就是只能有一个根节点。

      2、DataSet对象里的值来生成XML文件

      应用到数据库,将数据库的DataSet对象里的值来生成XML文件的元素;

      using (SqlConnection con = new SqlConnection("Server=.;DataBase=HGSTUDY;uid=sa;pwd=yao"))
                  {
                      con.Open();
                      SqlCommand command = new SqlCommand("select * from GL_STUDY", con);
                      command.CommandType = CommandType.Text;
                      DataSet ds = new DataSet("DATASET");
                      //DATASET将成为XML文件中的根节点名称,否则系统将其命名为NewDataSet      
                      SqlDataAdapter sda = new SqlDataAdapter();
                      sda.SelectCommand = command;
                      sda.Fill(ds, "DATATABLE");
                      //DATATABLE为所生成XML文件中的子节点名称,否则系统将其命名为Table。   
                      ds.WriteXml("dbxml.xml");
                      // DataSet的方法WriteXml将数据写入到XML文件,就是这么一句话。如果不保存到文件,直接ds.GetXML()      
                  }

      3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。

      用一个字符串作为一个XML文档中的xmlAttribute或xmlElement。[其元素或属性由类的定义来设置(xml串行化)]

      using System;System.xml.Serialization;

      先初始化一个类,设置属性值

      var xmlDoc = new XmlDocument();
      //Create the xml declaration first
      xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
      //Create the root node and append into doc
      var el = xmlDoc.CreateElement("Contacts");
      xmlDoc.AppendChild(el);
      // Contact
      XmlElement elementContact = xmlDoc.CreateElement("Contact");
      XmlAttribute attrID = xmlDoc.CreateAttribute("id");
      attrID.Value = "01";
      elementContact.Attributes.Append(attrID);
      el.AppendChild(elementContact);
      // Contact Name
      XmlElement elementName = xmlDoc.CreateElement("Name");
      elementName.InnerText = "Daisy Abbey";
      elementContact.AppendChild(elementName);
      // Contact Gender
      XmlElement elementGender = xmlDoc.CreateElement("Gender");
      elementGender.InnerText = "female";
      elementContact.AppendChild(elementGender);
      xmlDoc.Save("test1.xml");

      建XmlSerializer实例

      class XXX {  
                     XmlSerializer ser = new XmlSerializer(Type.GetType("forxml.truck"));   
                     Truck tr = new Truck();     
                     tr.ID = 1;    
                     tr.cheID = "赣A T34923";
                 }

      Serialize方法–完成对类的串行化

      XmlTextWriter xtw = new XmlTextWriter("myxml.xml",Encoding.UTF8); 
      
              用XmlTextWriter 创建一个XML文件   
               ser.Serialize(xtw, tr);      
               //如果只想显示,可以直接ser.Serialize(Console.Out, tr);
      }

      xml常用方法:
      定义xml文档:XmlDocument xmlDoc = new XmlDocument();
      初始化xml文档:xmlDoc.Load(“D:book.xml”);//找到xml文件
      创建根元素:XmlElement xmlElement = xmlDoc.CreateElement(“”, “Employees”, “”);
      创建节点:XmlElement xeSub1 = xmlDoc.CreateElement(“title”);
      查找Employees节点:XmlNode root = xmlDoc.SelectSingleNode(“Employees”);
      添加节点:xe1.AppendChild(xeSub1);
      更改节点的属性:xe.SetAttribute(“Name”, “李明明”);
      移除xe的ID属性:xe.RemoveAttribute(“ID”);
      删除节点title:xe.RemoveChild(xe2);

      示例:写入xml

      1、创建xml文档
      public void CreateXMLDocument()
      {
          XmlDocument xmlDoc = new XmlDocument();          
      //加入XML的声明段落,
          XmlDeclaration xmlDeclar;
          xmlDeclar = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);
          xmlDoc.AppendChild(xmlDeclar);          
      
      //加入Employees根元素
          XmlElement xmlElement = xmlDoc.CreateElement("", "Employees", "");
          xmlDoc.AppendChild(xmlElement);        
      
      //添加节点
          XmlNode root = xmlDoc.SelectSingleNode("Employees");
          XmlElement xe1 = xmlDoc.CreateElement("Node");
          xe1.SetAttribute("Name", "薪薪代码");
          xe1.SetAttribute("ISB", "2-3631-4");        
      
      //添加子节点
          XmlElement xeSub1 = xmlDoc.CreateElement("title");
          xeSub1.InnerText = "学习VS";
          xe1.AppendChild(xeSub1);
      
          XmlElement xeSub2 = xmlDoc.CreateElement("price");
          xe1.AppendChild(xeSub2);
          XmlElement xeSub3 = xmlDoc.CreateElement("weight");
          xeSub3.InnerText = "20";
          xeSub2.AppendChild(xeSub3);
      
          root.AppendChild(xe1);
          xmlDoc.Save("D:\book.xml");//保存的路径
      }

      生成的xml文件如下:

      
      --
        
          学习VS-
          
            20
          
        
      
      2 、增加节点
      XmlDocument xmlDoc = new XmlDocument();
      xmlDoc.Load("D:\book.xml");//找到xml文件
      XmlNode root = xmlDoc.SelectSingleNode("Employees");//查找Employees节点
      XmlElement xe1 = xmlDoc.CreateElement("Node2");//添加Node2节点
      xe1.SetAttribute("Name", "张飞");
      XmlElement xeSub1 = xmlDoc.CreateElement("title");//定义子节点
      xeSub1.InnerText = "心情好";
      xe1.AppendChild(xeSub1);//添加节点到Node2
      root.AppendChild(xe1);//添加节点到Employees
      xmlDoc.Save("D:\book.xml");

      结果:

      
        -
          -
            学习VS-
            
              20
            
          -
          
            心情好
          -
          
            心情好
          
      
      3 、修改节点:
      public void ModifyNode()
      {
          XmlDocument xmlDocument = new XmlDocument();
          xmlDocument.Load("D:\book.xml");
          XmlNodeList nodeList = xmlDocument.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点
      
          foreach (XmlNode xn in nodeList)//遍历
          {
       XmlElement xe = (XmlElement)xn;
       if (xe.GetAttribute("Name") == "薪薪代码")
       {
           xe.SetAttribute("Name", "薪薪");//更改节点的属性
      
           XmlNodeList xnl = xe.ChildNodes;//获取xe的所有子节点
           foreach (XmlNode xn1 in xnl)
           {
        XmlElement xe2 = (XmlElement)xn1;//将节点xn1的属性转换为XmlElement
        if (xe2.Name == "title")//找到节点名字为title的节点
        {
            xe2.InnerText = "今天天气不好";
        }
      
        if (xe2.Name == "price")
        {
            XmlNodeList xnl2 = xe2.ChildNodes;
            foreach (XmlNode xn2 in xnl2)
            {
         if (xn2.Name == "weight")
         {
             xn2.InnerText = "88";
         }
            }
        }
           }
       }
          }
      
          xmlDocument.Save("D:\book2.xml");
      }

      运行结果:

      
      -
      -
      今天天气不好-
      88
      
      
      -
      心情好
      
      4 、删除节点
      public void DeleteNode()
      {
          XmlDocument xmlDocument = new XmlDocument();
          xmlDocument.Load("D:\book1.xml");
          XmlNodeList xnl = xmlDocument.SelectSingleNode("Employees").ChildNodes;
      
          foreach (XmlNode xn in xnl)
          {
       if (xn.Name == "Node")
       {
           XmlElement xe = (XmlElement)xn;//将xn的属性转换为XmlElement
           xe.RemoveAttribute("ID");//移除xe的ID属性
           XmlNodeList xnl2 = xe.ChildNodes;
           for (int i = 0; i < xnl2.Count; i++)
           {
        XmlElement xe2 = (XmlElement)xnl2.Item(i);
        if (xe2.Name == "title")
        {
            xe.RemoveChild(xe2);//删除节点title
        }
           }
       }
          }
          xmlDocument.Save("D:\book3.xml");
      }

      结果:

      
      -
      --
      20
      
      -
      
      心情好
      -
      
      心情好
      
      

      c#读取xml文件

      xml文件如下:

      
      
          1143
          192.168
        

      在写入xml文件时,最主要使用了两个方法:Load和Save。

      Load:初始化xml文档,以便项目文件获取具体的xml节点的值。

      public void Load(string path)
      {
          try
          {
       XmlDocument xmlDocument = new XmlDocument();
       xmlDocument.Load(path);
       XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
       foreach (XmlNode xn in xnl)
       {
           if (xn.Name == configuration_ServerAddress)
           {
        ServerAddress = xn.InnerText;
           }
       }
          }
          catch(Exception ex)
          { }
      }

      Save:在项目系统中进行修改配置文件值后,需要对xml进行重新保存

      public void Save(string path)
      {
          try
          {
       XmlDocument xmlDocument = new XmlDocument();
       xmlDocument.Load(path);
       XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
       foreach (XmlNode xn in xnl)
       {
           if (xn.Name == configuration_ServerAddress)
           {
        xn.InnerText = ServerAddress;
           }
       }
      
       xmlDocument.Save(path);
          }
          catch (Exception ex)
          { }
      }

      此处将所有代码都贴出来,方便下次实现。因为项目是WPF文件,而且都是简单控件,所以只贴出后台代码。

      class ConfigurationManager:INotifyPropertyChanged
      {
              public const string managerNode = "configurationN";//根节点
              public const string configuration_ServerAddress = "ServerAddress";//子节点
              private string _ServerAddress;
              public string ServerAddress
              {
                  get { return _ServerAddress; }
                  set
                  {
                      _ServerAddress = value;
                      NotifyPropertyChanged("ServerAddress");
                  }
              }
      
              public void Load(string path)
              {
                  try
                  {
                      XmlDocument xmlDocument = new XmlDocument();
                      xmlDocument.Load(path);
      
                      XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
                      foreach (XmlNode xn in xnl)
                      {
                          if (xn.Name == configuration_ServerAddress)
                          {
                              ServerAddress = xn.InnerText;
                          }
                      }
                  }
                  catch(Exception ex)
                  { }
              }
      
              public void Save(string path)
              {
                  try
                  {
                      XmlDocument xmlDocument = new XmlDocument();
                      xmlDocument.Load(path);
      
                      XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
                      foreach (XmlNode xn in xnl)
                      {
                          if (xn.Name == configuration_ServerAddress)
                          {
                              xn.InnerText = ServerAddress;
                          }
                      }
      
                      xmlDocument.Save(path);
                  }
                  catch (Exception ex)
                  { }
              }
      
              public event PropertyChangedEventHandler PropertyChanged;
              private void NotifyPropertyChanged(string propertyName)
              {
                  if (PropertyChanged != null)
                  {
                      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                  }
              }
      
              public static ConfigurationManager Instance = new ConfigurationManager();
      }
      
      public partial class MainWindow : Window
      {
              public MainWindow()
              {
                  InitializeComponent();
                  Start();
                  this.tb1.Text = ConfigurationManager.Instance.ServerAddress.ToString();
      
              }
              private string path = "CONFIG\System.xml";
      
              private void button1_Click(object sender, RoutedEventArgs e)
              {
                  ConfigurationManager.Instance.ServerAddress = this.tb1.Text;
                  ConfigurationManager.Instance.Save(path);
              }
      
              private void button2_Click(object sender, RoutedEventArgs e)
              {
                  Application.Current.Shutdown();
              }
      
              private void Start()
              {
                  ConfigurationManager.Instance.Load(path);
              }
      }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>