學(xué)習(xí)心得LINQ to XML
本文從六個(gè)方面對(duì)LINQ to XML做了簡(jiǎn)單介紹,它們分別是命名空間、編程方式創(chuàng)建XML文檔、使用LINQ查詢創(chuàng)建XML文檔等等。
LINQ to XML可以看作是一個(gè) “better DOM” 編程模型,可以和 System.Xml.dll 程序集中的很多成員交互。
一、命名空間
System.Xml.Linq.dll 程序集定義了三個(gè)命名空間:System.Xml.Linq, System.Xml.Schema 和 System.Xml.XPath
最核心的是 System.Xml.Linq, 定義了對(duì)應(yīng) XML 文檔個(gè)方面的很多類型
定義XML文檔類型
二、編程方式創(chuàng)建XML文檔
以前的 .NET XML編程模型需要使用很多冗長(zhǎng)的 DOM API,而 LINQ to XML 則完全可以用與 DOM 無關(guān)的方式與 XML 文檔交互。這樣不但大大減少了代碼行,而且這種編程模型可以直接映射到格式良好的XML文檔結(jié)構(gòu)。
- 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);
- }
在內(nèi)存中創(chuàng)建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查詢創(chuàng)建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內(nèi)容
- static void LoadExistingXml()
- {
- // Build an XElement from string.
- string myElement =
- @"
'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);
- }
五、遍歷內(nèi)存中的LINQ to XML 文檔
LINQ to XML 示例:
- "1.0" encoding="utf-8"?>
"0"> Ford Blue Chuck "1"> VW Silver Mary "2"> Yugo Pink Gipper "55"> Ford Yellow - 862 CHAPTER 24 n PROGRAMMING WITH THE LINQ APIS
Max "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);
- }
以上就是對(duì)LINQ to XML 的簡(jiǎn)單介紹。
【編輯推薦】