LINQ to XML

【返回目录】 

前一篇里我们演示了LINQ to SQL的基本应用,可以看出,其基本原理是很直观简单的,把数据库中的表映射到内存中作为对象,这样由面向对象语言编写的应用程序就可以非常方便地对其进行调用和操作,而且也完全符合面向对象的开发思想,同时也不再要求程序员必须对当前的数据库设计非常了解才能对其数据进行操作了。

其实我想,用惯了.NET平台的朋友都会想到,本着该平台一贯的简洁、易用的设计理念,LINQ to XML也不会有多难用,那么我们就从实际的例子入手吧。

我们假设有这样一段XML代码,里面包含的就是我们要用到的数据,场景就还是延续先前的学校场景吧:

   1: <Data>
   2:     <Schools>
   3:         <School ID="0">
   4:             <Name>Red Star School</Name>
   5:             <Location>Beijing, China.</Location>
   6:             <ZipCode>100080</ZipCode>
   7:         </School>
   8:         <School ID="1">
   9:             <Name>University of Washington</Name>
  10:             <Location>Seattle, Washington, US.</Location>
  11:             <ZipCode>98101</ZipCode>
  12:         </School>
  13:     </Schools>
  14:     <Students>
  15:         <Stduent ID="0">
  16:             <Name>ZeroCool</Name>
  17:             <Age>24</Age>
  18:             <Gender>0</Gender>
  19:             <Scores>
  20:                 <Chinese>87</Chinese>
  21:                 <Math>90</Math>
  22:                 <English>91</English>
  23:             </Scores>
  24:         </Stduent>
  25:         <Stduent ID="1">
  26:             <Name>Frieda</Name>
  27:             <Age>22</Age>
  28:             <Gender>1</Gender>
  29:             <Scores>
  30:                 <Chinese>94</Chinese>
  31:                 <Math>97</Math>
  32:                 <English>93</English>
  33:             </Scores>
  34:         </Stduent>
  35:         <Stduent ID="2">
  36:             <Name>Michael</Name>
  37:             <Age>23</Age>
  38:             <Gender>0</Gender>
  39:             <Scores>
  40:                 <Chinese>74</Chinese>
  41:                 <Math>58</Math>
  42:                 <English>63</English>
  43:             </Scores>
  44:         </Stduent>
  45:     </Students>
  46: </Data>

接下来,我们要使用上面这段XML里包含的数据,则需要先把这段XML数据映射到内存中,然后再对其进行操作和处理。如果是在过去,我们可能首先想到的使用XmlDocument或者XmlTextReader这两个类来读写XML,但是LINQ to XML给我们带来了新的方式:

   1: public static XElement InitializeXMLData()
   2: {
   3:     if (!File.Exists(_filePath))
   4:     {
   5:         throw new FileNotFoundException("The XML data file is missing.");
   6:     }
   7:  
   8:     XElement data = XElement.Parse(File.ReadAllText(_filePath));
   9:  
  10:     return data;
  11: }

我们用这个方法中的第8行代码就可以把一个已有的XML文件映射成内存中的对象,接下来我们就可以对这个XML数据对象进行操作。因为XML数据都是具有层次结构的,所以我们对XML的操作往往也是具有层次性的。

   1: var students = data.Elements().Where(element => element.Name.ToString() == "Students");
   2:  
   3: foreach (var student in students.Elements())
   4: {
   5:     Console.WriteLine(student.Element("Name").Value);
   6: }

例如上面这段代码,我们就从这个XML数据对象中获取到了所有学生对象的姓名属性的值。当然,只要调用对象的相应方法我们就可以对XML数据对象进行增、删、改、查等操作,例如我们要删除年龄大于23岁的同学的记录:

   1: foreach (var student in students.Elements())
   2: {
   3:     if (int.Parse(student.Element("Age").Value) > 23)
   4:     {
   5:         student.Remove();
   6:     }
   7: }

显然,LINQ to XML使用起来并不难。在“探索之旅”系列里,我们只介绍基本的使用方式和原则,较为深入的知识点将会放在今后的“Deep Into”系列中去,LINQ刚刚正式发布,使用它的开发人员还并不多,等大家都有了一定的实践经验我们再来一起深入探讨吧。

posted @ 2007-12-01 20:19  麦机长  阅读(1245)  评论(0编辑  收藏  举报