xml文件的读取和写入方法小结

来源:互联网 发布:淘宝第七层级 编辑:程序博客网 时间:2024/04/29 14:13

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("文件读取失败!");
            }

 

原创粉丝点击