linqToXml查询

Xml数据源为:

<?xml version="1.0" encoding="GB2312"?>
<Main>
  <Data>
    <username>admin</username>
    <time>2012-3-21 4:05:54</time>
    <ip>127.0.0.1</ip>
    <action>admin登录系统</action>
  </Data>
  <Data>
    <username>admin</username>
    <time>2012-3-21 4:19:20</time>
    <ip>127.0.0.1</ip>
    <action>admin删除了课件管理中id为11数据</action>
  </Data>
  <Data>
    <username>admin</username>
    <time>2012-3-21 4:20:10</time>
    <ip>127.0.0.1</ip>
    <action>admin在课件分类管理中id为0下添加技术类分类</action>
  </Data>
  <Data>
    <username>admin</username>
    <time>2012-3-21 4:20:37</time>
    <ip>127.0.0.1</ip>
    <action>admin在课件中课件分类id为48中添加技术一课件</action>
  </Data>
  <Data>
    <username>admin</username>
    <time>2012-3-21 4:26:39</time>
    <ip>127.0.0.1</ip>
    <action>admin登录系统</action>
  </Data>
  <Data>
    <username>admin</username>
    <time>2012-3-21 4:40:53</time>
    <ip>127.0.0.1</ip>
    <action>admin在课件中课件分类id为48中添加技术课程课件</action>
  </Data>
</Main>

查询节点UserName=admin的Action的节点值

   /// <summary>
        /// linq 查询Xml
        /// </summary>
        private static void linqToXml()
        {

            string file = File.ReadAllText("2012-03-21.xml", Encoding.Default);
            XElement element = XElement.Parse(file);
            var items = from book in element.Elements("Data")
                        where (string)book.Element("username") == "admin"
                        select book.Element("action");
            foreach (var item in items)
            {
                Console.WriteLine(item.Value);
            }
            Console.ReadKey();
        }

查询结果为:

admin登录系统
admin删除了课件管理中id为11数据
admin在课件分类管理中id为0下添加技术类分类
admin在课件中课件分类id为48中添加技术一课件
admin登录系统
admin在课件中课件分类id为48中添加技术课程课件

=====================================================================================

Xml操作

一:创建XML

    private static void linqToCreateXML()
        {
         

            XElement elment = new XElement("Data",
                new XElement("aaa",
                    new XElement("name", "lily"),
                    new XElement("age", "10")),
                new XElement("aaa",
                    new XElement("name", "jak"),
                    new XElement("age", "110")));
            Console.WriteLine(elment.ToString());
            Console.WriteLine("========================");
            //创建Xml
            XDocument doc = new XDocument(new XElement("Data",
                new XElement("aaa",
                    new XElement("name", "lily"),
                    new XElement("age", "10")),
                new XElement("aaa",
                    new XElement("name", "jak"),
                    new XElement("age", "110"))));

            //为Xml之追加节点,并且设置属性
            doc.Element("Data").Add(
                new XElement("name",
                    new XAttribute("type", "11"), "asasas"),
                    new XElement("age", "222"));


            Console.WriteLine(doc.ToString());
            Console.ReadLine();
        }

运行结果:

<Data>
  <aaa>
    <name>lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
</Data>
========================
<Data>
  <aaa>
    <name>lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name type="11">asasas</name>
  <age>222</age>
</Data>

==================================================================================

修改Xml指定节点的属性值

     /// <summary>
        /// 修改Xml属性值
        /// </summary>
        private static void LinqToUpdateAttrbut()
        {
            //创建Xml
            XDocument doc = new XDocument(new XElement("Data",
                new XElement("aaa",
                    new XElement("name", "lily"),
                    new XElement("age", "10")),
                new XElement("aaa",
                    new XElement("name", "jak"),
                    new XElement("age", "110"))));

            //为Xml之追加节点,并且设置属性
            doc.Element("Data").Add(
                new XElement("name",
                    new XAttribute("type", "11"), "asasas"),
                    new XElement("age", "222"));


            Console.WriteLine(doc.ToString());

         

            Console.WriteLine("===========2=============");
            //修改节点Name的属性,当属性值为11的时候,则修改为“我是修改后的”
            foreach (XAttribute attr in doc.Element("Data").Element("name").Attributes("type"))
            {
                if (attr.Value == "11")
                {
                    attr.Value = "我是修改后的";
                }
            }
            Console.WriteLine(doc.ToString());
            Console.WriteLine("=============2===========");
            Console.ReadLine();
        }

运行结果:

<Data>
  <aaa>
    <name>lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name type="11">asasas</name>
  <age>222</age>
</Data>
===========2=============
<Data>
  <aaa>
    <name>lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name type="我是修改后的">asasas</name>
  <age>222</age>
</Data>
=============2===========

=====================================================================================

修改节点值

将name节点值为lily的age字段值修改为0(将lily的年龄修改为0岁)

 private static void LinqToUpdateValue()
        {
            //创建Xml
            XDocument doc = new XDocument(new XElement("Data",
                new XElement("aaa",
                    new XElement("name", "lily"),
                    new XElement("age", "10")),
                new XElement("aaa",
                    new XElement("name", "jak"),
                    new XElement("age", "110"))));

            //为Xml之追加节点,并且设置属性
            doc.Element("Data").Add(
                new XElement("name",
                    new XAttribute("type", "11"), "asasas"),
                    new XElement("age", "222"));


            Console.WriteLine(doc.ToString());
            //查询年龄为lily的节点
            var s1 = from s in doc.Element("Data").Elements("aaa") where s.Element("name").Value == "lily" select s;

            Console.WriteLine("===========2=============");
           //修改年龄节点为0
            foreach (var attr in s1)
            {
                attr.Element("age").SetValue("0");
          
            }
            Console.WriteLine(doc.ToString());
            Console.WriteLine("=============2===========");
            Console.ReadLine();
        }

运行结果:

<Data>
  <aaa>
    <name>lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name type="11">asasas</name>
  <age>222</age>
</Data>
===========2=============
<Data>
  <aaa>
    <name>lily</name>
    <age>0</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name type="11">asasas</name>
  <age>222</age>
</Data>
=============2===========

=========================================================================

为某节点设置属性1

SetAttributeValue(属性名, 属性值);

:当此节点没有属性的时候,则添加属性,当节点已经存在此数字的时候则修改属性

     private static void LinqToUpdateAttrbut1()
        {
            //创建Xml
            XDocument doc = new XDocument(new XElement("Data",
                new XElement("aaa",
                    new XElement("name", "lily"),
                    new XElement("age", "10")),
                new XElement("aaa",
                    new XElement("name", "jak"),
                    new XElement("age", "110"))));

            //为Xml之追加节点,并且设置属性
            doc.Element("Data").Add(
                new XElement("name",
                  
                    new XElement("age", "222")));


            Console.WriteLine(doc.ToString());



            Console.WriteLine("===========添加了属性============");
       
            //对指定节点添加属性
            doc.Element("Data").Element("aaa").Element("name").SetAttributeValue("aaaa", "ssssssss");
            Console.WriteLine(doc.ToString());
           ////////////////
            //文档更新触发事件
            doc.Changed += new EventHandler<XObjectChangeEventArgs>(doc_Changed);
            //////////////////

            //Console.WriteLine(doc.ToString());
            Console.WriteLine("===========我修改了属性属性============");
            //对指定节点更新属性
            doc.Element("Data").Element("aaa").Element("name").SetAttributeValue("aaaa", "ccccccc");

            Console.WriteLine(doc.ToString());
            Console.ReadLine();
        }
        static void doc_Changed(object sender, XObjectChangeEventArgs e)
        {
            Console.WriteLine("我是文档修改的事件,我抓住了,");
        }

运行结果为:

<Data>
  <aaa>
    <name>lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name>
    <age>222</age>
  </name>
</Data>
===========添加了属性============
<Data>
  <aaa>
    <name aaaa="ssssssss">lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name>
    <age>222</age>
  </name>
</Data>
===========我修改了属性属性============
我是文档修改的事件,我抓住了,
<Data>
  <aaa>
    <name aaaa="ccccccc">lily</name>
    <age>10</age>
  </aaa>
  <aaa>
    <name>jak</name>
    <age>110</age>
  </aaa>
  <name>
    <age>222</age>
  </name>
</Data>
原文地址:https://www.cnblogs.com/happygx/p/2451767.html