zoukankan      html  css  js  c++  java
  • LINQ to XML

    读写XML有很多技术,Dom、Sax等,还有高级的读写技术XmlSerializer、 Linq To XML(System.Xml.Linq)、 System.Xml(XMLDocument)等, XmlSerializer要求对每种不同的文件都定义一套类,很麻烦,而Linq To XML则不需要单独创建类,当然更底层一些,代码比XmlSerializer多,灵活性更高。System.Xml下的类是2.0及之前操作xml推荐的,现在很多人也仍然在用这个namespace下的类,这个namespace下的类和Linq To XML非常相似,因此不用单独学。
    核心类XElement,一个XElement表示一个节点,new XElement("Order");创建一个名字为Order的标签,调用Add增加子节点,也是XElement 对象,和TreeView一样。
    想得到字符串怎么办?ToString
    调用XElement的Save方法将xml内容保存在Writer中

    image

    1.xElement

    表示一个 XML 元素。

    命名空间: System.Xml.Linq
    程序集: System.Xml.Linq(在 System.Xml.Linq.dll 中)

    static void Main(string[] args)
            {
                XElement xPerson = new XElement("Persons");
                XElement xMan = new XElement("Person");
                XElement xWoman = new XElement("Person");
     
                xMan.Value = "Jerry";  
                xMan.SetAttributeValue("hand",2); //设置节点属性
                //错误的写法:xMan.Attribute("age").Value = "30";
    xPerson.Add(xMan);
                xPerson.Add(xWoman);
     
                string xml = xPerson.ToString();
                Console.WriteLine(xml);
                Console.ReadKey();
            }
     

    image

    2.XDocument

    表示 XML 文档。

    命名空间: System.Xml.Linq
    程序集:System.Xml.Linq(在 System.Xml.Linq.dll 中)

    XDocument doc = XDocument.Load(reader),加载XML文件,XDocument就是加载的对象

    显示行号 复制代码 progam.cs
    1. using (Stream stream = File.OpenRead(@"../../app.xml"))
      
    2.             {
      
    3.                 using (StreamReader reader = new StreamReader(stream))
      
    4.                 {
      
    5.                     XDocument xdoc = XDocument.Load(reader);
      
    6.                     //xdoc.Root //XDocument的Root属性表示根节点
      
    7.                     //读取根节点的v1属性:111
      
    8. string v1 = xdoc.Root.Attribute("v1").Value;//读取根节点的属性
      
    9. Console.WriteLine(v1);
      
    10.                     //读取子节点的数量:2
      
    11. Console.WriteLine(xdoc.Root.Nodes().Count());
      
    12.                     //读取第1个子节点:<Person age="25">xMan</Person>
      
    13. XNode node = xdoc.Root.Nodes().ElementAt(0);
      
    14.                     Console.WriteLine(node);
      
    15.                     //读取xMan的属性age:25
      
    16. XElement xe1 = (XElement)node;
      
    17.                     string xMan = xe1.Value;//元素
      
    18. string age = xe1.Attribute("age").Value;//属性
      
    19. Console.WriteLine("{0}的属性age为:{1}.", xMan, age);
      
    20.                     Console.ReadKey();
      
    21.                 }
      
    22.             }
      

    image

    3.读取节点<connectionStrings>add的属性

    显示行号 复制代码 app.config
    1. <?xml version="1.0" encoding="utf-8" ?>
      
    2. <configuration>
      
    3.   <!--fffff-->
      
    4.   <connectionStrings>
      
    5.     <add name="c1" connectionString="DateSource=....."/>
      
    6.     <add name="c2" connectionString="DateSource=127.0.0.1"/>
      
    7.   </connectionStrings>
      
    8.   <!--aaaaa-->
      
    9. </configuration>
      

    显示行号 复制代码 Program.cs
    1. using (Stream stream = File.OpenRead(@"../../app.config"))
      
    2. {
      
    3.     using (StreamReader reader = new StreamReader(stream))
      
    4.     {
      
    5.         XDocument xdoc = XDocument.Load(reader);
      
    6.         IEnumerable<XElement> connectrs = 
      
    7.                 xdoc.Root.Elements("connectionStrings");
      
    8.         if (connectrs.Count()==1)
      
    9.         {
      
    10.             XElement xCon = connectrs.ElementAt(0);
      
    11.             foreach (XElement item in xCon.Elements("add"))
      
    12.             {
      
    13.                 string name = item.Attribute("name").Value;
      
    14.                 string connstr = item.Attribute("connectionString").Value;
      
    15.                 Console.WriteLine("名字:{0},字符串:{1}", name, connstr);
      
    16.             }
      
    17.         }
      
    18.     }
      
    19. }
      
    20. Console.ReadKey();
      

    image

    4.练习读取属性NavigationPage的值

    显示行号 复制代码 WMappManifest.xml
    1. <?xml version="1.0" encoding="utf-8" ?>
      
    2. <Persons v1="111">
      
    3.     <add  name="Jerry">
      
    4.       <Tasks>
      
    5.         <Name>NRG</Name>
      
    6.         <DefaulTask NavigationPage="DemoPage1.xmal">HOT</DefaulTask>
      
    7.       </Tasks>
      
    8.     </add>
      
    9. </Persons>
      

    代码如下:

    using (Stream stream = File.OpenRead(@"../../WMappManifest.xml"))
                {
                    using (StreamReader reader =new StreamReader(stream))
                    {
                        XDocument xdoc = XDocument.Load(reader);
                        var data = xdoc.Root.Element("add").Element("Tasks").Element("DefaulTask");
                        Console.WriteLine(data.Attribute("NavigationPage").Value);
     
                    }
                }
     

    image

    Descendants()的用法:

    有且只有1个节点,结果如上图

    using (Stream stream = File.OpenRead(@"../../WMappManifest.xml"))
                {
                    using (StreamReader reader =new StreamReader(stream))
                    {
                        XDocument xdoc = XDocument.Load(reader);
                        //var data = xdoc.Root.Element("add").Element("Tasks").Element("DefaulTask");
                        //Console.WriteLine(data.Attribute("NavigationPage").Value);                  
                        //Descendants()有且只有唯一子节点,
                        //慎用,容易取错点
                        var Adata=xdoc.Descendants("DefaulTask").Single();
                        Console.WriteLine(Adata.Attribute("NavigationPage").Value);
                    }
                }
     
  • 相关阅读:
    R语言与医学统计图形-【25】ggplot图形分面
    R语言与医学统计图形-【21】ggplot2标题
    R语言与医学统计图形-【24】ggplot位置调整函数
    R语言与医学统计图形-【23】ggplot2坐标系转换函数
    R语言与医学统计图形-【22】ggplot2统计变换函数
    R语言与医学统计图形-【20】ggplot2图例
    Android开发教程
    寒假来临,开启脚本语言的学习
    汇编语言学习资料
    SORT函数的使用方法(转载)
  • 原文地址:https://www.cnblogs.com/tangge/p/2595011.html
Copyright © 2011-2022 走看看