xml文件读取和写入的实现方式小结

14 篇文章 0 订阅
7 篇文章 0 订阅

xml文件的读取和写入主要又两种,一种是XMLDocument,另一种是XMLtextwriter/xmltextreader。

1、XMLtextwriter/xmltextreader

 

     读取程序:

             string path="myxml.xml";

            string str = "";
            XmlTextReader xtr = new XmlTextReader(path);
          

 ///read()这个方法的返回值总是为真,直到到达文件的底部时,返回值才变为假。换句话说, 循环在文件的开始时启动并且读入所有的节点, 一次读入一个节点, 直到到达文件的结尾:

    try

     {
           while(xtr.Read())

            ///此时,xtr里面有着当前节点的信息也就是从刚刚获得数据的那个节点的信息。也就是xtr.value就是当前元素的值,可以用if(str.name==“”)来获得感兴趣的元素的值
            {
                switch (xtr.NodeType)
                {
                    case XmlNodeType.Element:
                        str += "Element:" + xtr.Name;
                        break;
                    case XmlNodeType.Text:
                        str += "Text:" + xtr.Value;
                        break;
                    case XmlNodeType.EndElement:
                        str += "EndElement:" + xtr.Name;
                        break;
                    default:
                        break;
                }
                  
                    
            }
            tb.AppendText(str);

            xtr.Close();

         }

       catch

          {

          }

当使用NodeType属性时,理解节点怎么联系到XML单元是非常重要的。例如, 看下列 XML元素:

<city>nanjing</city>

XMLtextReader 把这个元素看作 3 个节点,顺序如下:

1.<city>标签被读为类型 XMLNodeType.Element 节点,元素的名字“city”可从 XMLTextReader 的Name属性中获得。

2.文本数据“nanjing”被读为类型为XMLNodeType.Text的节点。数据“nanjing ” 可从XMLTextReader 的Value属性中取得。

3.</city>标签被读为类型为XMLNodeType.EndElement 节点。同样,元素的名称“city”可从XMLTextReader的Name属性中获得。

如果XMLTextReader遇到一个错误, 例如出现违反XML句法的情况,它抛出一个System.XML.XMLException类型的异常。使用这个类的代码应该总是被保护 ( 在Try……Catch块中)。

 

 

          写入程序: 

            XmlTextWriter xtw = new XmlTextWriter(path,ASCIIEncoding.ASCII);
            xtw.Formatting = Formatting.Indented;
            xtw.WriteStartDocument();
            xtw.WriteComment("it's happy's first xml file!");
            xtw.WriteStartElement("grandfather");
            xtw.WriteStartElement("father");
            xtw.WriteName("happy");
            xtw.WriteValue("happy123");
            xtw.WriteElementString("me", "nuaa");
            xtw.WriteEndElement();
            xtw.WriteEndElement();
            xtw.WriteEndDocument();
            xtw.Flush();
            xtw.Close();
            MessageBox.Show("XML文件保存成功!");

 

2、XMLDOCUMENT

      写入程序:

             

 try
            {
                string path = "happy.xml";
                XmlDocument xd = new XmlDocument();
               
                xd.CreateXmlDeclaration("1.0", "utf-8", "yes");
                XmlNode root = xd.CreateElement("NUAA");
                XmlNode xn = xd.CreateElement("CAE");
                XmlAttribute xa = xd.CreateAttribute("name");

                xa.Value = "happyhuang";
                root.Attributes.Append(xa);
                xn.InnerText = "mytest";
                XmlNode XN1 = xd.CreateElement("CAE1");
                XN1.InnerText = "MYTEST";
               
                 xn.AppendChild(XN1);
              
                root.AppendChild(xn);
                xd.AppendChild(root);
                xd.Save(path);
                MessageBox.Show("文件保存成功!");
            }

 

            catch
            {
                MessageBox.Show("文件写入失败!");
            }

 

      文件读取:

               ///在写入程序中,xl.SelectSingleNode("CAE")和xl.Attributes["name"].Value;这里的CAE和name都只会在NUAA的子节点里查找,如果是在子节点中找不到或者是在子节点的子节点,那么就报错,也就是它只会在NUAA节点的第一阶子节点中查找。但是foreach这一句表示遍历NUAA下所有的节点,不只是第一阶子节点,因此它会打印出所有节点的INNERTEXT。这里加入xl.SelectSingleNode("CAE")和xl.Attributes["name"].Value只是测试用,不加的话他们对应节点的INNERTEXT值也会被打印出来的,现在就是相当于打印两遍就是了。主要是想弄清xl.SelectSingleNode("CAE")和xl.Attributes["name"].Value这只有CAE和name的父节点是NUAA时才不报错。

          try

            {
                string path = "happy.xml";
                string st = "";
                XmlDocument xd1 = new XmlDocument();
                xd1.Load(path);
                XmlNodeList xnl = xd1.SelectNodes("/NUAA");
                foreach (XmlNode xl in xnl)
                {
                    st += xl.InnerText;
                    XmlNode XL = xl.SelectSingleNode("CAE");
               
                    st += XL.InnerText;
                    st += xl.Attributes["name"].Value;
                }
               
              

                tb.AppendText(st);
            }
            catch
            {
                MessageBox.Show("文件读取失败!");
            }

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中操作XML文件需要使用System.Xml命名空间下的类。 以下是一个简单的示例,演示如何将数据写入XML文件并从中读取数据: ```csharp using System; using System.Xml; class Program { static void Main(string[] args) { // 创建XML文档对象 XmlDocument xmlDoc = new XmlDocument(); // 创建XML声明 XmlDeclaration xmlDec = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); // 添加XML声明到XML文档 xmlDoc.AppendChild(xmlDec); // 创建根元素 XmlElement root = xmlDoc.CreateElement("students"); // 将根元素添加到XML文档 xmlDoc.AppendChild(root); // 创建子元素 XmlElement student = xmlDoc.CreateElement("student"); XmlAttribute id = xmlDoc.CreateAttribute("id"); id.Value = "001"; student.Attributes.Append(id); XmlElement name = xmlDoc.CreateElement("name"); name.InnerText = "Tom"; student.AppendChild(name); XmlElement age = xmlDoc.CreateElement("age"); age.InnerText = "18"; student.AppendChild(age); // 将子元素添加到根元素 root.AppendChild(student); // 保存XML文档 xmlDoc.Save("students.xml"); // 读取XML文档 xmlDoc.Load("students.xml"); // 获取根元素 root = xmlDoc.DocumentElement; // 遍历子元素 foreach (XmlElement ele in root.ChildNodes) { Console.WriteLine("Student ID: " + ele.Attributes["id"].Value); Console.WriteLine("Name: " + ele["name"].InnerText); Console.WriteLine("Age: " + ele["age"].InnerText); } Console.ReadLine(); } } ``` 上述代码将创建一个名为“students.xml”的XML文件,其中包含一个名为“students”的根元素和一个名为“student”的子元素。程序会将数据写入该文件,然后从文件中读取数据并将其打印出来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值