c#读写Xml文件

时间:2021-08-05 13:06:38

写入xml文件

第一种方法:使用XmlDocument类:

Demo1

//通过代码创建XML文档
            //1、引用命名空间   System.Xml             //2、创建一个 xml 文档             XmlDocument xml = new XmlDocument();             //3、创建一行声明信息,并添加到 xml 文档顶部             XmlDeclaration decl = xml.CreateXmlDeclaration("1.0", "utf-8", null);             xml.AppendChild(decl);             //4、创建根节点             XmlElement rootEle = xml.CreateElement("人");             xml.AppendChild(rootEle);             //5、创建子结点|属性:性别             XmlElement childEle = xml.CreateElement("性别");             rootEle.AppendChild(childEle);             XmlElement c2Ele = xml.CreateElement("男");             c2Ele.InnerText = "1";             childEle.AppendChild(c2Ele);             c2Ele = xml.CreateElement("女");             c2Ele.InnerText = "0";             childEle.AppendChild(c2Ele);             //6、创建子节点|属性:四肢             childEle = xml.CreateElement("胳膊");             rootEle.AppendChild(childEle);             c2Ele = xml.CreateElement("右胳膊");             c2Ele.InnerText = "一般";             childEle.AppendChild(c2Ele);             c2Ele = xml.CreateElement("左胳膊");             c2Ele.InnerText = "一般";             childEle.AppendChild(c2Ele);             c2Ele = xml.CreateElement("左退");             c2Ele.InnerText = "粗壮";             childEle.AppendChild(c2Ele);             c2Ele = xml.CreateElement("右腿");             c2Ele.InnerText = "粗壮";             childEle.AppendChild(c2Ele);             xml.Save(@"C:\Users\Administrator\Desktop\Test\test.xml");
-----------------------------------------------------------------------------------------------
Demo2
try
          {
              //初始化一个xml实例               XmlDocument myXmlDoc = new XmlDocument();               //创建xml的根节点               XmlElement rootElement = myXmlDoc.CreateElement("Computers");               //将根节点加入到xml文件中(AppendChild)               myXmlDoc.AppendChild(rootElement);               //初始化第一层的第一个子节点               XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");               //填充第一层的第一个子节点的属性值(SetAttribute)               firstLevelElement1.SetAttribute("ID", "11111111");               firstLevelElement1.SetAttribute("Description", "Made in China");               //将第一层的第一个子节点加入到根节点下               rootElement.AppendChild(firstLevelElement1);               //初始化第二层的第一个子节点               XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");               //填充第二层的第一个子节点的值(InnerText)               secondLevelElement11.InnerText = "Lenovo";               firstLevelElement1.AppendChild(secondLevelElement11);               XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");               secondLevelElement12.InnerText = "5000";               firstLevelElement1.AppendChild(secondLevelElement12);               XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");               firstLevelElement2.SetAttribute("ID", "2222222");               firstLevelElement2.SetAttribute("Description", "Made in USA");               rootElement.AppendChild(firstLevelElement2);               XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");               secondLevelElement21.InnerText = "IBM";               firstLevelElement2.AppendChild(secondLevelElement21);               XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");               secondLevelElement22.InnerText = "10000";               firstLevelElement2.AppendChild(secondLevelElement22);               //将xml文件保存到指定的路径下               myXmlDoc.Save(@"C:\Users\Administrator\Desktop\Test\test.xml");           }           catch (Exception ex)           {              MessageBox.Show(ex.ToString());           }



第二种方法:使用XmlTextWriter类:
           //XmlTextWriter写文件的时候, 默认是覆盖以前的文件, 如果此文件名不存在,它将创建此文件.首先设置一下,你要创建的XML文件格式,
 
 
           //然后可以通过WriteStartElement和WriteElementString方法来创建元素,这两者的区别就是如果有子结点的元素,那么创建的时候就用WriteStartElement,然后去创建子元素,创建完毕后,要调用相应的WriteEndElement来告诉编译器,创建完毕,用WriteElementString来创建单个的元素,用WriteAttributeString来创建属性.如下:            XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"C:\Users\Administrator\Desktop\Test\test.xml", null);            //使用 Formatting 属性指定希望将 XML 设定为何种格式。 这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。            myXmlTextWriter.Formatting = Formatting.Indented;            myXmlTextWriter.WriteStartDocument(false);            myXmlTextWriter.WriteStartElement("日期");            myXmlTextWriter.WriteComment("这是厨房的下单记录");            myXmlTextWriter.WriteStartElement("申购单");            myXmlTextWriter.WriteAttributeString("部门", "中厨房");            myXmlTextWriter.WriteAttributeString("申购人", "赵亮");            for (int i = 0; i < 10; i++)            {                myXmlTextWriter.WriteElementString("编号", "0001");                myXmlTextWriter.WriteElementString("编码", "gcxg");                myXmlTextWriter.WriteElementString("名称", "国产西瓜");                myXmlTextWriter.WriteElementString("规格", "4只/每箱");                myXmlTextWriter.WriteElementString("单价", "88.5");                myXmlTextWriter.WriteElementString("单位", "箱");                myXmlTextWriter.WriteElementString("数量", "5");                myXmlTextWriter.WriteElementString("金额", "450");                myXmlTextWriter.WriteElementString("备注", "要熟的");            }            myXmlTextWriter.Flush();            myXmlTextWriter.Close();
第三种方法:使用LINQ to XML 的XDocument类:
 
var doc = new XDocument(new XElement("Contacts",               new XElement("Contact", new XAttribute("id", "01"),               new XElement("Index", "0001"),               new XElement("Code", "gcxg"),               new XElement("Name", "国产西瓜"),               new XElement("spec", "4只/每箱"),            new XElement("Price", "80"),            new XElement("Unit", "箱"),            new XElement("Number", "4"),            new XElement("Total", "320"),            new XElement("Remakes", "要熟的")               )));           doc.Save(@"C:\Users\Administrator\Desktop\Test\test.xml");
=====================================================================================================
读写完整示例

using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; namespace _45_Xml读写 {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }         /// <summary>             /// 创建节点             /// </summary>             /// <param name="xmldoc"></param>  xml文档           /// <param name="parentnode"></param>父节点             /// <param name="name"></param>  节点名           /// <param name="value"></param>  节点值           ///            public static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)         {             XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);             node.InnerText = value;             parentNode.AppendChild(node);         }         private void WriteXml_Click(object sender, EventArgs e)         {                        //创建一个 xml 文档             XmlDocument xmlDoc = new XmlDocument();             //创建类型声明节点               XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");             xmlDoc.AppendChild(node);             //创建根节点               XmlElement noteRoot = xmlDoc.CreateElement("R");             //给节点属性赋值             noteRoot.SetAttribute("version", "1.0");             noteRoot.SetAttribute("Title", "Demo");             xmlDoc.AppendChild(noteRoot);             for (int i = 0; i < 4; i++)             {                 XmlElement RootClass1 = xmlDoc.CreateElement("A");                 XmlNode NoteClass1 = xmlDoc.SelectSingleNode("R");                 if (NoteClass1 != null) NoteClass1.AppendChild(RootClass1);                 CreateNode(xmlDoc, RootClass1, "A-value", "avalue");//可以复制多条                 XmlElement RootClass2 = xmlDoc.CreateElement("B");                 XmlNode NoteClass2= xmlDoc.SelectSingleNode("R").SelectNodes("A").Item(i);                 if (NoteClass2 != null) NoteClass2.AppendChild(RootClass2);                                 CreateNode(xmlDoc, RootClass2, "B-value", "bvalue");//可以复制多条                 XmlElement RootClass3 = xmlDoc.CreateElement("C");//添加子节点                 XmlNode NoteClass3 = xmlDoc.SelectSingleNode("R").SelectNodes("A").Item(i).SelectSingleNode("B");                 if (NoteClass3 != null)NoteClass3.AppendChild(RootClass3);                 CreateNode(xmlDoc, RootClass3, "C-value", "cvalue");//可以复制多条                     }             xmlDoc.Save(@"C:\Users\Administrator\Desktop\Test\test.xml");         }         private void ReadXml_Click(object sender, EventArgs e)         {             XmlDocument xmlDoc = new XmlDocument();             XmlReaderSettings settings = new XmlReaderSettings();             settings.IgnoreComments = true; //忽略文档里面的注释             XmlReader reader = XmlReader.Create(@"C:\Users\Administrator\Desktop\Test\test.xml", settings);             xmlDoc.Load(reader);             //然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码             // 得到根节点bookstore             XmlNode mainNote = xmlDoc.SelectSingleNode("R"); //通过 日期 根节点来读取XML文件             if (mainNote != null) //如果根节点存在             {                 XmlNodeList childNote = mainNote.ChildNodes; //声明一个获取所有子节点的集合                                  foreach (XmlNode outchildNote in childNote) //在这个集合中遍历所有子节点                 {                     XmlElement bookNote = (XmlElement) outchildNote; // 将节点转换为元素,便于得到节点的属性值                     XmlNodeList singleNote = bookNote.ChildNodes; // 将所有节点属性(也就是最终的值)放进节点集合                     foreach (XmlNode outNote in singleNote) //遍历节点属性                     {                         listBox1.Items.Add(outNote.InnerText);                     }                     // listBox1.Items.Add(bookNote.GetAttribute("部门").ToString()); // 得到Type和ISBN两个属性的属性值                     // listBox1.Items.Add(bookNote.GetAttribute("申购人").ToString());                                   }             }         }     } }