C#对XMl文件的操作

         C# 对xml文件的操作比较多,例如,当我们设计一款软件,需要保存软件的设置信息,这个时候,可以把参数以xml文件的形式进行存储。便于下次打开软件时,以上次的设置值打开。又例如,在网络通信的时候,我们写的软件要与其它服务器进行通信,以xml形式通信,这个时候也是需要用到这个知识。又例如,我们常见的PC桌面浏览器软件,也是直接接收的xml文件,最后通过浏览器软件处理成好看的网页内容。这些说明了学会用C#操作xml文件是相当普遍和重要的。以下这里总结的知识,便于后面方便查找跟使用。

一.以下是xml文件的查找

方法1:一般方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace xml查找
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument xdoc = XDocument.Load("person.xml");
            List<XElement> list = new List<XElement>();
            SearchElementsZhao(xdoc.Root,list);

        }
        public static void SearchElementsZhao(XElement ele,List<XElement> list)
        {
            foreach(XElement item in ele.Elements())
            {
                //判断这个元素的名字是不是name,如果是name 那么看一下名字是不是赵小虎
                if(item.Name.LocalName=="name")
                {
                    if(item.Value=="赵晓虎")
                    {
                        list.Add(item.Parent);
                    }
                }
                SearchElementsZhao(item, list);//递归

            }
        }
    }
}

方法2:linq查询语法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace linq_xml
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument xdoc = XDocument.Load("person.xml");
            //  一个是linq查询语法(与sql语句类似)
            var query = from s in xdoc.Descendants()
                        where s.Name.LocalName == "name" && s.Value == "赵晓虎"
                        select s.Parent;

            foreach (XElement item in query)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
    }
}

person.xml文件内容如下

<?xml version="1.0" encoding="gb2312"?>

注意:这里开头的语句另外一种形式是

<?xml version="1.0" encoding="UTF-8"?>
关于这两种的区别待下回分解

<?xml version="1.0" encoding="UTF-8"?>

-<root>


-<person 测试属性="测试数据" id="1">

<name>赵晓虎</name>

<sex>男</sex>

<age>44</age>

</person>


+<person 测试属性="测试数据" id="2">


-<person 测试属性="测试数据" id="3">

<name>马伦</name>

<sex>男</sex>

<age>60</age>

</person>


-<person 测试属性="测试数据" id="4">

<name>杨洪波</name>

<sex>女</sex>

<age>35</age>

</person>


-<person 测试属性="测试数据" id="5">

<name>赵剑宇(黑皮)</name>

<sex>男</sex>

<age>59</age>

</person>


-<test>


-<tt>


-<ee>

<name>赵晓虎</name>

</ee>

</tt>

</test>

</root>

二.以下是xml文件的写入:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace _04使用LinqToXML
{
    class Program
    {
        static void Main(string[] args)
        {
            // System.XML.Linq; 
            // XDocument
            // XElement
            // XAttribute

            // 兼容做法
            #region 兼容传统的语法
            XDocument xDoc = new XDocument();
            // xDoc.Declaration = new XDeclaration(
            // XElement xRoot = new XElement("root", "我是一个文本内容");
            XElement xRoot = new XElement("root");
            xRoot.Value = "我是文本";

            XAttribute xAttr = new XAttribute("Id", "0002");
            xDoc.Add(xRoot);
            xRoot.Add(xAttr);
            xDoc.Save("2.xml"); 
            #endregion

            // 真正Linq的语法
            #region Linq语法演示
            // F#  函数式编程语言
            // 基于函数式
            //new XDocument(
            //        new XElement("root", 
            //                new XAttribute("id", "12345"),
            //                "我是一个根节点"
            //            )
            //    ).Save("3.xml");
            // f1().f2().f3()....
            // 链式编程,流水线生产
            // lisp 
            #endregion

            #region 一个案例
            string[] strs = "赵晓虎,牛亮亮,马伦,杨洪波,赵剑宇(黑皮)".Split(',');
            Random r = new Random();

            XDocument xdoc = new XDocument(new XElement("root"));
            // xdoc.Root
            for (int i = 0; i < strs.Length; i++)
            {
                xdoc.Root.Add(new XElement("person",
                        new XAttribute("id", i + 1),
                        new XAttribute("测试属性", "测试数据"),
                        new XElement("name", strs[i]),
                        new XElement("sex", "男女"[r.Next(2)]),
                        new XElement("age", r.Next(18, 65))
                    ));
            }

            xdoc.Save("person.xml"); 
            #endregion
         #region 最简便的方法
          XDocument.Parse(@"<?xml version=""1.0"" encoding=""gb2312""?>
         <root>
         <person id=""123"">测试</person>
         </root>").Save("4.xml");
         #endregion
     }
   }
}
生成的person.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>

-<root>


-<person 测试属性="测试数据" id="1">

<name>赵晓虎</name>

<sex>男</sex>

<age>44</age>

</person>


-<person 测试属性="测试数据" id="2">

<name>牛亮亮</name>

<sex>男</sex>

<age>25</age>

</person>


-<person 测试属性="测试数据" id="3">

<name>马伦</name>

<sex>男</sex>

<age>60</age>

</person>


-<person 测试属性="测试数据" id="4">

<name>杨洪波</name>

<sex>女</sex>

<age>35</age>

</person>


-<person 测试属性="测试数据" id="5">

<name>赵剑宇(黑皮)</name>

<sex>男</sex>

<age>59</age>

</person>

</root>
生成的4.xml文件如下:

<?xml version="1.0" encoding="gb2312"?>
<root>
  <person id="123">测试</person>
</root>

未完待续,还需要对xml的文件进行修改和查找


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值