本文从六个方面对LINQ to XML做了简单介绍,它们分别是命名空间、编程方式创建XML文档、使用LINQ查询创建XML文档等等。
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 文档个方面的很多类型
二、编程方式创建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);
- }
在内存中创建LINQ to 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);
- }
四、加载和解析LINQ to XML内容
- static void LoadExistingXml()
- {
- // Build an XElement from string.
- string myElement =
- @"< SPAN>'3'>
- Yellow
- Yugo
- ";
- XElement newElement = XElement.Parse(myElement);
- Console.WriteLine(newElement);
- Console.WriteLine();
- // Load the SimpleInventory.xml file.
- XDocument myDoc = XDocument.Load("SimpleInventory.xml");
- Console.WriteLine(myDoc);
- }
五、遍历内存中的LINQ to XML 文档
LINQ to XML 示例:
- "1.0" encoding="utf-8"?>
- < SPAN>"0">
- Ford
- Blue
- Chuck
- < SPAN>"1">
- VW
- Silver
- Mary
- < SPAN>"2">
- Yugo
- Pink
- Gipper
- < SPAN>"55">
- Ford
- Yellow
- 862 CHAPTER 24 n PROGRAMMING WITH THE LINQ APIS
- Max
- < SPAN>"98">
- BMW
- Black
- Zippy
LINQ to XML 加载
- 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();
- }
LINQ to XML遍历
- 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);
- }
LINQ to XML查询
- 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);
- }
六、修改LINQ to 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);
- }
以上就是对LINQ to XML 的简单介绍。