C# 中的XML操作详解:读取,过滤以及数据绑定

来源:互联网 发布:北京网络派出所 编辑:程序博客网 时间:2024/05/21 06:03

在这个小教程,我将演示在Windows Phone 7如何让ListBox的数据绑定XML数据。我将使用LINQ to XML,以便加载和读取数据,而且我将展示如何实现一个基本的过滤。

首先让我们先创建一个Windows Phone 7的应用程序项目示例,并添加以下两个demo xml文件。

people.xml

  <?xml version=  "  1.0  " encoding=  "  utf-8  " ?> 
<people> 
<person> 
<firstname>Kate</firstname> 
<lastname>Smith</lastname> 
<age>  27</age> 
</person> 
<person> 
<firstname>Tom</firstname> 
<lastname>Brown</lastname> 
<age>  30</age> 
</person> 
<person> 
<firstname>Tim</firstname> 
<lastname>Stone</lastname> 
<age>  36</age> 
</person> 
<person> 
<firstname>Ann</firstname> 
<lastname>Peterson</lastname> 
<age>  27</age> 
</person> 
</people> 


在这里我不得不感谢一直支持我的卤面网版主,是他让我提起兴趣写了这么一篇文章,再次感谢卤面网,一个非常不错的wp7开发论坛,后面我也将再次向大家发布几篇高质量文章,请大家到卤面上找我吧,呵呵

    进入正题:

 

 


PeopleCustom.xml

  <?xml version=  "  1.0  " ?> 
<People> 
<Person 
FirstName=  "  Kate " 
LastName=  "  Smith " 
Age=  "  27  " /> 
<Person 
FirstName=  "  Tom " 
LastName=  "  Brown " 
Age=  "  30  " /> 
<Person 
FirstName=  "  Tim " 
LastName=  "  Stone " 
Age=  "  36  " /> 
<Person 
FirstName=  "  Ann " 
LastName=  "  Peterson " 
Age=  "  27  " /> 
</People> 

下一步是创建一个示例类将被用来存储XML元素值:

public  class Person 

string firstname; 
string lastname; 
int age; 

public  string FirstName 

get {   return firstname; } 
set { firstname = value; } 


public  string LastName 

get {   return lastname; } 
set { lastname = value; } 


public  int Age 

get {   return age; } 
set { age = value; } 

为了读取XML文件的信息,我们将使用的XDocument

所以你首先需要添加System.Xml.Linq.dll引用,然后using System.Xml.Linq;

  XDocument loadedData = XDocument.Load(  "  People.xml  "); 

var data =   from query  in loadedData.Descendants(  "  person  "
select  new Person 

FirstName = (  string)query.Element(  "  firstname  "), 
LastName = (  string)query.Element(  "  lastname  "), 
Age = (  int)query.Element(  "  age  "
}; 
listBox.ItemsSource = data; 

在接下来的例子中,我们将通过数据的“年龄”属性值过滤源代码如下:

XDocument loadedCustomData = XDocument.Load(  "  PeopleCustom.xml  "); 
var filteredData =   from c  in loadedCustomData.Descendants(  "  Person  "
where c.Attribute(  " Age  ").Value ==  "  27  " 
select  new Person() 

FirstName = c.Attribute(  "  FirstName  ").Value, 
LastName = c.Attribute(  "  LastName  ").Value 

}; 

listBox1.ItemsSource = filteredData; 

为了显示的数据,我们将使用以下ItemTemplates绑定ListBox控件:

<StackPanel x:Name=  " ContentPanel  " Grid.Row= "  1  " Margin=  "  12,0,12,0 " Orientation=  " Horizontal  ">
<TextBlock Text=  "  XML Data: "/> 
<ListBox x:Name=  "  listBox ">
<ListBox.ItemTemplate> 
<DataTemplate> 
<StackPanel Margin=  "  10  " >
<TextBlock Text=  "  {Binding FirstName} "/> 
<TextBlock Text=  "  {Binding LastName} "/> 
<TextBlock Text=  "  {Binding Age} "/> 
</StackPanel> 
</DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 
<TextBlock Text=  "  Filtered by Age 27: "/> 
<ListBox x:Name=  "  listBox1 ">
<ListBox.ItemTemplate> 
<DataTemplate> 
<StackPanel Margin=  "  20  " >
<TextBlock Text=  "  {Binding FirstName} "/> 
<TextBlock Text=  "  {Binding LastName} "/> 
</StackPanel> 
</DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 
</StackPanel> 



我希望你能喜欢我的文章!如果你有更多想法,请到卤面网 wp7开发论坛(codewp7.com)问答区联系我,我会很高兴知道你在想什么。同时wp7交流QQ群172765887中,也能找到我的身影,感谢大家

源码请猛击








原文链接:http://www.cnblogs.com/sonyye/archive/2012/03/04/2379592.html