C#XML文档的基本操作

前言:

 XML称为可扩展标记性语言,是eXtensible Markup Language 的缩写。在.NET框架中XML是非常重要的一部分,它用于描述数据,是当前处理结构化文档信息的有力工具。XML与操作系统,编程语言的开发平台无关,可以实现不同系统之间的数据交互。

示例:

<?xml version="1.0" encoding="utf-8"?>
<Contacts><!--注释-->
  <Contact id="01">
    <Name>Daisy Abbey</Name>
    <Gender>female</Gender>
  </Contact>
</Contacts>

第一行是XML文档的声明,主要由两个部分组成:

   version:文档符合XML1.0规范。

   encoding:文档字符编码,默认为"UTF-8"

注释:使用<!--内容-->格式,无法被嵌套

标签:自定义的,包括属性

注意:XML是一种标记语言,严格区分大小写,必须成对出现,注意结尾的反斜杠

生成XML文件

        private void button1_Click(object sender, EventArgs e) //生成
        {
            //创建XmlDocument对象
            XmlDocument document = new XmlDocument();
            //xml文档的声明部分
            XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "UTF-8", "");//xml文档的声明部分
            document.AppendChild(declaration);//添加至XmlDocument对象中
            //创建用户对象
            User xrz = new User() { ID = txt_id.Text, Name = txt_name.Text, Age = txt_age.Text, Explain = txt_explain.Text };
            //创建根节点User
            XmlElement User = document.CreateElement("User");//CreateElement(节点名称)
            //设置根节点的属性
            User.SetAttribute("Type","员工");
            //创建子节点ID
            XmlElement ID = document.CreateElement("ID");
            ID.InnerText = xrz.ID; //设置其值
            XmlElement Name = document.CreateElement("Name");
            Name.InnerText = xrz.Name;
            XmlElement Age = document.CreateElement("Age");
            Age.InnerText = xrz.Age;
            XmlElement Explain = document.CreateElement("Explain");
            Explain.InnerText = xrz.Explain;
            //添加至父节点User中
            User.AppendChild(ID);
            User.AppendChild(Name);
            User.AppendChild(Age);
            User.AppendChild(Explain);
            //将根节点添加至XML文档中
            document.AppendChild(User);
            //保存输出路径
            document.Save(@"E:\"+xrz.ID+xrz.Name+".xml");

            ///>
            ///注意要把根节点添加至XML文档中
            ///多层级只需要在其子节点使用AppendChild再次添加即可
            ///使用XmlElement对象的SetAttribute方法设置其属性
            ///在保存路径的时候最好使用异常处理
        }
    }

    class User
    {
        public string  ID { get; set; }
        public string  Name { get; set; }
        public string  Age { get; set; }
        public string  Explain { get; set; }
    }

读取XML文件(XmlDocument)

            //创建XML文档类
            XmlDocument xmlDoc = new XmlDocument(); 
            //加载xml文件
            xmlDoc.Load("files/FullChannels.xml"); //从指定的位置加载xml文档
            //获取根节点
            XmlElement xmlRoot = xmlDoc.DocumentElement; //DocumentElement获取文档的跟
            //遍历节点
            foreach(XmlNode node in xmlRoot.ChildNodes)
            {
                //根据节点名称查找节点对象
                Console.WriteLine(node["channelType"].InnerText + "\t" + node["tvChannel"].InnerText + "\t" + node["path"].InnerText);
            }

Load的路径为:bin\Debug\

读取XML文件(XmlTextReader)

            //System.Environment.CurrentDirectory系统路径,bin-Debug下
            //XmlTextReader 文档流的读取方式,只读
            XmlTextReader reader = new XmlTextReader(System.Environment.CurrentDirectory + @"\北京电视台.xml");

            while(reader.Read())
            {
                if (reader.Name == "playTime") //判断节点名称
                {
                    Console.WriteLine(reader.ReadString());//将节点内容读取为一个字符串
                }
                else if (reader.Name == "median")
                {
                    Console.WriteLine(reader.ReadString());
                }
                else if (reader.Name == "programName")
                {
                    Console.WriteLine(reader.ReadString());
                }
                
            }
            reader.Close(); //关闭文档流

根据XML文件生成TreeView

        private void button1_Click(object sender, EventArgs e) //填充
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("files/Student.xml");
            XmlElement xmlnode = xmlDoc.DocumentElement;
            foreach(XmlNode node in xmlnode.ChildNodes)
            {
                 this.treeView1.Nodes.Add(node["Name"].InnerText); //添加根节点
                  for (int i = 0; i < this.treeView1.Nodes.Count; i++) //遍历根节点确认为其添加子节点
                  {
                    if (this.treeView1.Nodes[i].Text.Equals(node["Name"].InnerText))
                    {
                        this.treeView1.Nodes[i].Nodes.Add(node["Age"].InnerText);
                        this.treeView1.Nodes[i].Nodes.Add(node["Hobby"].InnerText);
                    }
                 }
            }
        }

 

猜你喜欢

转载自blog.csdn.net/qq_42766492/article/details/82314947