• C# Xml文件操作,解释见注释


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace XmlTest
    {
        class Program
        {
            //第一种方案 xml数据流顺序,这个很重要,如果使用数据流的方式就需要对这种格式严格的理解,使用DOC方式的话,就无所谓了
            static void ReadOrder()
            {
                XmlReaderSettings settings = new XmlReaderSettings();          // 控制解析和验证过程
                settings.IgnoreWhitespace = true;                              // 忽略空白区域
                settings.IgnoreComments   = true;                              // 忽略注释
                settings.ConformanceLevel = ConformanceLevel.Document;         // 是否只具有一个根节点
    
                using (XmlReader reader = XmlReader.Create("Sample.xml", settings))   //打开文件
                {
                    while (reader.Read())                                             //xml流单位为XMNL节点并且是单向的,每次调用read()都会使节点指向下一个位置,如果为false表示文件结束
                    {
                        Console.WriteLine(new string(' ', reader.Depth * 2));         //深度
                        Console.WriteLine(reader.NodeType);                           //节点类型,参考XmlNodeType结构,
    
                        switch (reader.NodeType)
                        {
                            case XmlNodeType.Element:                                //元素(例如,<item>)。
                            case XmlNodeType.EndElement:                             //末尾元素标记(例如,</item>)。
                                Console.WriteLine(reader.Name);
                                break;
    
                            case XmlNodeType.Text:                                   //节点的文本内容。
                            case XmlNodeType.Comment:                                //注释(例如,<!-- my comment -->)。
                            case XmlNodeType.Attribute:                              //属性
                                Console.WriteLine(reader.Value); 
                                break;
                        }
    
                        Console.WriteLine("================================");
                    }
                }
            }
    
            
            static void readtest()
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreWhitespace = true;
    
                using (XmlReader reader = XmlReader.Create("Sample.xml", settings))
                {
                    string str = "";
                    //检查当前节点是否是内容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)节点,如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。 它跳过以下类型的节点:ProcessingInstruction、DocumentType、Comment、Whitespace 或 SignificantWhitespace。
                    reader.MoveToContent();                        
    
                    //检查当前内容节点是否为具有给定 System.Xml.XmlReader.Name 的元素并将读取器推进到下一个节点。
                    reader.ReadStartElement("OpenNI");
                    Console.WriteLine(reader["id"]);
    
                    //当在派生类中被重写时,移动到具有指定 System.Xml.XmlReader.Name 的属性。
                    reader.MoveToAttribute("name");
                    //将当前位置的文本内容作为 System.String 对象读取。
                    Console.WriteLine(reader.ReadContentAsString());
    
                    reader.MoveToAttribute("id");
                    Console.WriteLine(reader.ReadContentAsString());
    
                    //读取属性后,节点位于Attribute,通过查看NoteType可以进行如下方式进行处理:
    
                    //第一种方式:
                    //reader.ReadStartElement();
                    //str = reader.ReadElementContentAsString("price", "");
                    //Console.WriteLine(str);
                    //reader.ReadEndElement();
               
                    //第二种方式:
    
                    //当在派生类中被重写时,移动到包含当前属性节点的元素。
                    reader.MoveToElement();
                    str = reader.ReadElementContentAsString("title", "");
                    Console.WriteLine(str);
    
    
                    reader.ReadStartElement("Licenses");
                    //检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 System.String
                    str = reader.ReadElementContentAsString("price", "");
                    Console.WriteLine(str);
                    reader.ReadEndElement();
    
                    reader.ReadEndElement();
                }
            }
    
    
            static void writetest(string filename)
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.OmitXmlDeclaration = false;
    
                using (XmlWriter writer = XmlWriter.Create(filename, settings))
                {
                    //起始元素
                    writer.WriteStartElement("book");
    
                    //写属性
                    writer.WriteAttributeString("name","the art of code");
                    writer.WriteAttributeString("time", DateTime.Now.ToString());
    
                    //节点1
                    writer.WriteElementString("name","the art of code");
    
                    //节点2
                    writer.WriteStartElement("time");
                    writer.WriteValue(DateTime.Now);
                    writer.WriteEndElement();
    
                    //结束“book”节点
                    writer.WriteEndElement();
    
                }
            }
    
    
            //==========================================================第二种方案
            static void WriteXmlDoc(String filename)
            {
                XmlDocument xml = new XmlDocument();
    
                //添加声明
                XmlDeclaration xmldecl = xml.CreateXmlDeclaration("1.0", "gb2312", null);
                xml.AppendChild(xmldecl);
    
                //创建根节点
                XmlElement root =  xml.CreateElement("root");
                xml.AppendChild(root);
    
                //创建属性
                XmlAttribute id = xml.CreateAttribute("id");
                id.Value = "1234";
                //创建时间属性
                XmlAttribute time = xml.CreateAttribute("time");
                time.Value = DateTime.Now.ToString();
    
    
    
                //创建元素
                XmlElement name = xml.CreateElement("name");
                name.AppendChild(xml.CreateTextNode("the art of code"));
                XmlElement author = xml.CreateElement("author");
                author.AppendChild(xml.CreateTextNode("s.b"));
    
                XmlElement book = xml.CreateElement("book");
                book.AppendChild(name);
                book.AppendChild(author);
    
                //根节点添加属性
                root.Attributes.Append(id);
                root.Attributes.Append(time);
                //设置属性
                root.SetAttribute("num", "10000");
    
                //跟节点添加子节点
                root.AppendChild(book);
    
                xml.Save(filename);
            }
    
            static void ReadXmlDoc(string filename) 
            {
                XmlDocument xml = new XmlDocument();
                xml.Load(filename);
    
                //获得属性
                Console.WriteLine(xml.DocumentElement.Attributes["time"].Value);
    
                //遍历子节点
                if (xml.DocumentElement.HasChildNodes)
                {
                    XmlNodeList list = xml.DocumentElement.ChildNodes;
    
                    foreach (XmlNode it in list)
                    {
                        Console.WriteLine(it.InnerXml);
                    }
                }
            }
    
            static void Main(string[] args)
            {
                //ReadOrder();
              //  readtest();
    
    //            writetest("test.xml");
    
                WriteXmlDoc("doc.xml");
                ReadXmlDoc("doc.xml");
                Console.Read();
            }
        }
    }
    细雨标记:
  • 相关阅读:
    淘宝nginx的学习使用,安装及反向代理,负载均衡
    Linux5
    Linux4
    Linux权限相关及yum源的配置
    linux基本命令及python3的环境配置
    使用Guava RateLimiter限流
    Runnable与Callable 区别
    [Kafka] 如何保证消息不丢失
    [多线程] 等待所有任务执行完成
    [Docker] 快速安装mysql
  • 原文地址:https://www.cnblogs.com/zsb517/p/4079199.html
Copyright © 2020-2023  润新知