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);
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值