zoukankan      html  css  js  c++  java
  • LINQ TO Xml【转载】

    本文转载自 http://www.cnblogs.com/sunrack/articles/1081714.html

    LINQ to XML 可以看作是一个 “better DOM” 编程模型,可以和 System.Xml.dll 程序集中的很多成员交互。

    一、命名空间

    System.Xml.Linq.dll 程序集定义了三个命名空间:System.Xml.Linq, System.Xml.Schema  和 System.Xml.XPath

    最核心的是 System.Xml.Linq, 定义了对应 XML 文档个方面的很多类型

    Member of System.Xml.Linq

    Meaning in Life

    XAttribute

    Represents an XML attribute on a given XML element

    XComment

    Represents an XML comment

    XDeclaration

    Represents the opening declaration of an XML document

    XDocument

    Represents the entirety of an XML document

    XElement

    Represents a given element within an XML document

    XName/XNamespace

    Provide a very simple manner to define and reference XML namespaces


    二、编程方式创建XML文档

    以前的 .NET XML编程模型需要使用很多冗长的 DOM API,而 LINQ to XML 则完全可以用与 DOM 无关的方式与 XML 文档交互。这样不但大大减少了代码行,而且这种编程模型可以直接映射到格式良好的XML文档结构。

    static void CreateFunctionalXmlElement()
    {
    // A "functional" approach to build an
    // XML element in memory.
    XElement inventory =
    new XElement("Inventory",
    new XElement("Car", new XAttribute("ID", "1"),
    new XElement("Color", "Green"),
    new XElement("Make", "BMW"),
    new XElement("PetName", "Stan")
    )
    );
    // Call ToString() on our XElement.
    Console.WriteLine(inventory);
    }


    在内存中创建XML文档

            static void CreateFunctionalXmlDoc()
            {
                XDocument inventoryDoc
    =
               
    new XDocument(
               
    new XDeclaration("1.0", "utf-8", "yes"),
               
    new XComment("Current Inventory of AutoLot"),
               
    new XElement("Inventory",
               
    new XElement("Car", new XAttribute("ID", "1"),
               
    new XElement("Color", "Green"),
               
    new XElement("Make", "BMW"),
               
    new XElement("PetName", "Stan")
                ),
               
    new XElement("Car", new XAttribute("ID", "2"),
               
    new XElement("Color", "Pink"),
               
    new XElement("Make", "Yugo"),
               
    new XElement("PetName", "Melvin")
                )
                )
                );
               
    // Display the document and save to disk.
                Console.WriteLine(inventoryDoc);
                inventoryDoc.Save(
    "SimpleInventory.xml");
            }

    三、使用 LINQ 查询创建XML文档

    static void CreateXmlDocFromArray()
    {
    // Create an anonymous array of anonymous types.
    var data = new [] {
    new { PetName = "Melvin", ID = 10 },
    new { PetName = "Pat", ID = 11 },
    new { PetName = "Danny", ID = 12 },
    new { PetName = "Clunker", ID = 13 }
    };
    // Now enumerate over the array to build
    // an XElement.
    XElement vehicles =
    new XElement("Inventory",
    from c
    in data
    select
    new XElement("Car",
    new XAttribute("ID", c.ID),
    new XElement("PetName", c.PetName)
    )
    );
    Console.WriteLine(vehicles);
    }


    四、加载和解析XML内容

     static void LoadExistingXml()
            {
               
    // Build an XElement from string.
                string myElement =
                                           
    @"<Car ID ='3'>
                                <Color>Yellow</Color>
                                <Make>Yugo</Make>
                                </Car>
    ";
                XElement newElement
    = XElement.Parse(myElement);
                Console.WriteLine(newElement);
                Console.WriteLine();
               
    // Load the SimpleInventory.xml file.
                XDocument myDoc = XDocument.Load("SimpleInventory.xml");
                Console.WriteLine(myDoc);
            }

    六、遍历内存中的XML文档

    XML示例:

    <?xml version="1.0" encoding="utf-8"?>
    <Inventory>
     
    <Car carID ="0">
       
    <Make>Ford</Make>
       
    <Color>Blue</Color>
       
    <PetName>Chuck</PetName>
     
    </Car>
     
    <Car carID ="1">
       
    <Make>VW</Make>
       
    <Color>Silver</Color>
       
    <PetName>Mary</PetName>
     
    </Car>
     
    <Car carID ="2">
       
    <Make>Yugo</Make>
       
    <Color>Pink</Color>
       
    <PetName>Gipper</PetName>
     
    </Car>
     
    <Car carID ="55">
       
    <Make>Ford</Make>
       
    <Color>Yellow</Color>
       
    862 CHAPTER 24 n PROGRAMMING WITH THE LINQ APIS
       
    <PetName>Max</PetName>
     
    </Car>
     
    <Car carID ="98">
       
    <Make>BMW</Make>
       
    <Color>Black</Color>
       
    <PetName>Zippy</PetName>
     
    </Car>
    </Inventory>

    加载

    static void Main(string[] args)
            {
                Console.WriteLine(
    "***** Fun with LINQ to XML *****\n");
               
    // Load the Inventory.xml document into memory.
                XElement doc = XElement.Load("Inventory.xml");
               
    // We will author each of these next
                PrintAllPetNames(doc);
                Console.WriteLine();
                GetAllFords(doc);
                Console.ReadLine();
            }


    遍历

    static void PrintAllPetNames(XElement doc)
    {
    var petNames
    = from pn in doc.Descendants("PetName")
    select pn.Value;
    foreach (var name in petNames)
    Console.WriteLine(
    "Name: {0}", name);
    }

    查询

    static void GetAllFords(XElement doc)
            {
                var fords
    = from c in doc.Descendants("Make")
                           
    where c.Value == "Ford"
                            select c;
               
    foreach (var f in fords)
                    Console.WriteLine(
    "Name: {0}", f);
            }

    七、修改 XML文档

    static void AddNewElements(XElement doc)
    {
    // Add 5 new purple Fords to the incoming document.
    for (int i = 0; i < 5; i++)
    {
    // Create a new XElement
    XElement newCar =
    new XElement("Car", new XAttribute("ID", i + 1000),
    new XElement("Color", "Green"),
    new XElement("Make", "Ford"),
    new XElement("PetName", "")
    );
    // Add to doc.
    doc.Add(newCar);
    }
    // Show the updates.
    Console.WriteLine(doc);
    }
  • 相关阅读:
    趣题:寻找出现了奇数次的数
    zstu2016校赛圣杯战争
    HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)
    HDU 5673 Robot ——(卡特兰数)
    HDU 3775 Chain Code ——(Pick定理)
    2016 ICPC北京站现场赛总结(再度流水账)
    2014苏州大学新生赛第二场(12.10)题目解析
    【Jump Game II 】cpp
    【Jump Game】cpp
    【 Sqrt(x) 】cpp
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1433365.html
Copyright © 2011-2022 走看看