一、命名空間
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);
}