C# 2008 學習筆記 - LINQ to XML

 一、命名空間

  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 =
  @"
  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);
  }

  六、遍歷內存中的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);
  }

發佈了42 篇原創文章 · 獲贊 3 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章