C# 基础--操作XML

 class Program
    {
        private static string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "document.xml");
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("******** XML 文件增删改   *****************\r\n");
                //创建xml文件
                Generate();
                //查询xml文件数据
                GetAllXMLData();
                Thread.Sleep(100);
                //修改XML
                ModifyXml();
                //添加节点
                AddXMLNode();
                Console.WriteLine("&&&&&  是否删除最后一个节点 1/2(Yes/No)");
                if (Convert.ToInt32(Console.ReadLine()) == 1)
                {        //删除节点
                    DeleteXMLNode();
                }
            }
            catch (Exception ex)
            {
                Console.Clear();
                Console.WriteLine("程序异常:" + ex.Message);
            }
        }

        //生成XML文件
        private static void Generate()
        {
            Console.WriteLine("\r\n******** 创建XML文件  开始   *****************\r\n");
            //在内存中创建Dom对象
            XmlDocument xmlDocument = new XmlDocument();
            //增加文档说明
            XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", "");
            //添加进文档
            xmlDocument.AppendChild(xmlDeclaration);
            //创建跟节点
            XmlElement xmlElement = xmlDocument.CreateElement("Student");
            xmlDocument.AppendChild(xmlElement);

            XmlElement xmlElement2 = xmlDocument.CreateElement("Name");
            xmlElement2.SetAttribute("ID", "101");
            xmlElement.AppendChild(xmlElement2);

            XmlElement xmlElement3 = xmlDocument.CreateElement("Sex");
            xmlElement.AppendChild(xmlElement3);

            XmlElement xmlElement3_1 = xmlDocument.CreateElement("sex1");
            xmlElement3_1.InnerText = "男";
            xmlElement3.AppendChild(xmlElement3_1);
            XmlElement xmlElement3_2 = xmlDocument.CreateElement("sex2");
            xmlElement3_2.InnerText = "女";
            xmlElement3.AppendChild(xmlElement3_2);

            XmlElement xmlElement4 = xmlDocument.CreateElement("Address");
            xmlElement4.InnerText = "广东";
            xmlElement.AppendChild(xmlElement4);

            xmlDocument.Save(path);
            Console.WriteLine($"生成XML文件成功:路径{path}");
            Process.Start(path);
            Console.WriteLine("\r\n******** 创建XML文件  结束   *****************\r\n\r\n");
/*
            XmlTextWriter w = new XmlTextWriter("XML文件名.xml", Encoding.Unicode); //Encoding.Unicode为生成XML文件的编码格式,到时候合输出:<?xml version="1.0" encoding="utf-16"?>
            w.Formatting = Formatting.Indented; // 这个比较重要,这个属性说明xml文件里面的内容是按级别缩进的。
            //下面开始生成文件的内容
            w.WriteStartDocument(); //开始写xml,在最后有一个与之匹配的w.WriteEndDocument();
            w.WriteStartElement("SpotList");
            w.WriteAttributeString("xmlns:xsi", "http:www.w3.org/2001/XMLSchema-instance"); //SpotList节点的属性
            w.WriteAttributeString("xmlns:xsd", "http:www.w3.org/2001/XMLSchema"); //SpotList节点属性,最后效果:<SpotList xmlns:xsi="http:www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:www.w3.org/2001/XMLSchema">
            w.WriteStartElement("Items");
            w.WriteElementString("Name", "张漂亮");
            w.WriteElementString("Caption", "温和");
            w.WriteElementString("Addr", "未知");
            w.WriteElementString("Phone", "1345678987");
            w.WriteStartElement("Intro"); //最后效果:<Intro><![CDATA[相关内容]]></Intro>
            w.WriteCData("Stop");
            //w.WriteEndElement();
            //w.WriteEndElement();
            //w.WriteEndElement();
            w.WriteEndDocument();
            w.Close(); //完成xml文件的输出,关闭
			*/
        }

        //读取XML
        private static void GetAllXMLData()
        {
            Console.WriteLine("\r\n******** 读取XML文件  开始   *****************\r\n");
            XmlDocument xmlDocument = new XmlDocument();
            //加载xml文件(参数为xml文件的路径)
            xmlDocument.Load(path);
            //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
            XmlNode rootNode = xmlDocument.SelectSingleNode("Student");
            //分别获得该节点的InnerXml和OuterXml信息
            string innerXmlInfo = rootNode.InnerXml.ToString();
            string outerXmlInfo = rootNode.OuterXml.ToString();
            Console.WriteLine("读取顶级标签");
            Console.WriteLine(innerXmlInfo);
            Console.WriteLine("");
            Console.WriteLine(outerXmlInfo);
            Console.WriteLine("");
            //获得该节点的子节点(即:该节点的第一层子节点)
            XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
            foreach (XmlNode node in firstLevelNodeList)
            {
                //获得该节点的属性集合
                XmlAttributeCollection attributeCol = node.Attributes;
                foreach (XmlAttribute attri in attributeCol)
                {
                    //获取属性名称与属性值
                    string name = attri.Name;
                    string value = attri.Value;
                    Console.WriteLine("{0} = {1}", name, value);
                }
                //判断此节点是否还有子节点
                if (node.HasChildNodes)
                {
                    //获取该节点的第一个子节点
                    XmlNode secondLevelNode1 = node.FirstChild;
                    //获取该节点的名字
                    string name = secondLevelNode1.Name;
                    //获取该节点的值(即:InnerText)
                    string innerText = secondLevelNode1.InnerText;
                    Console.WriteLine("{0} = {1}", name, innerText);

                    //获取该节点的第二个子节点(用数组下标获取)
                    XmlNode secondLevelNode2 = node.ChildNodes[1];
                    if (secondLevelNode2 == null) break;
                    name = secondLevelNode2.Name;
                    innerText = secondLevelNode2.InnerText;
                    Console.WriteLine("{0} = {1}", name, innerText);
                }
            }
            Console.WriteLine("\r\n******** 读取XML文件  结束   *****************\r\n");
            /*
             另一种简单的读取方法
            XmlTextReader reader = reader = new XmlTextReader(path);
            reader.MoveToContent();
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(reader.ReadOuterXml());
            XmlNode node = xmlDocument.SelectSingleNode("/ConfigName");
            XmlNodeList appList = node.ChildNodes;
            循环遍历 app.InnerText 得到标签里面的数据
             */
        }

        //修改XML
        private static void ModifyXml()
        {
            Console.WriteLine("\r\n******** 修改XML文件  开始   *****************\r\n");
            XmlDocument myXmlDoc = new XmlDocument();
            myXmlDoc.Load(path);
            XmlNodeList xmlNodeList = myXmlDoc.SelectSingleNode("/Student").ChildNodes;
            foreach (XmlNode node in xmlNodeList)
            {
                //修改此节点的属性值
                if (node.Name.Equals("Name"))
                {
                    node.InnerText = "9999";
                }
                Console.WriteLine(node.Value);
            }
            //要想使对xml文件所做的修改生效,必须执行以下Save方法
            myXmlDoc.Save(path);

            Console.WriteLine("\r\n******** 修改XML文件  开始   *****************\r\n");
        }

        //添加节点
        private static void AddXMLNode()
        {
            Console.WriteLine("\r\n******** 添加节点  开始   *****************\r\n");
            XmlDocument myXmlDoc = new XmlDocument();
            myXmlDoc.Load(path);
            //添加一个带有属性的节点信息
            //foreach (XmlNode node in myXmlDoc.SelectSingleNode("/Student/Sex").ChildNodes)
            //{
            //    XmlElement newElement = myXmlDoc.CreateElement("color");
            //    newElement.InnerText = "black";
            //    newElement.SetAttribute("IsMixed", "Yes");
            //    node.AppendChild(newElement);
            //}

            XmlNode node = myXmlDoc.SelectSingleNode("/Student/Address");
            XmlElement newElement = myXmlDoc.CreateElement("AddressDetail");
            newElement.InnerText = "广州";
            newElement.SetAttribute("IsMixed", "Yes");
            node.AppendChild(newElement);
            //保存更改
            myXmlDoc.Save(path);
            Console.WriteLine("\r\n******** 添加节点  结束   *****************\r\n");
        }

        //删除节点
        private static void DeleteXMLNode()
        {
            Console.WriteLine("\r\n******** 删除最后一个节点  开始   *****************\r\n");
            XmlDocument myXmlDoc = new XmlDocument();
            myXmlDoc.Load(path);
            XmlNode node1 = myXmlDoc.SelectSingleNode("/Student/Sex");
            XmlNode node2 = myXmlDoc.SelectSingleNode("/Student/Sex/sex1");
            node1.RemoveChild(node2);
            //foreach (XmlNode node in xmlNodeList)
            //{
            //    //记录该节点下的最后一个子节点(简称:最后子节点)
            //    XmlNode lastNode = node.LastChild;
            //    //删除最后子节点下的左右子节点
            //    lastNode.RemoveAll();
            //    //删除最后子节点
            //    node.RemoveChild(lastNode);
            //}
            //保存对xml文件所做的修改
            myXmlDoc.Save(path);
            Console.WriteLine("\r\n******** 删除最后一个节点  结束   *****************\r\n");
        }
    }

/*
XmlTextReader reader = new XmlTextReader(path);
reader.MoveToContent();
document.LoadXml(reader.ReadOuterXml());
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值