WP7编程 读取外部XML文件中存放的记录

本文介绍如何在WP7应用中创建和读取外部XML文件的记录集,包括定义记录结构、生成XML文件及在项目中引入并解析XML。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WP7编程 读取外部XML文件中存放的记录

Kagula

2011/8/9

内容简介

我准备写个简单的WP7程序,需要读取我在项目外部设置的XML文件中的记录集,作为Silverlight初学者,途中碰到了很多问题,现在把它记录下来,备查。

测试环境:[1]Visual2010+SP1

[2]Windows Phone SDK

正文

第一步:确定XML文件的格式

S1-1:先定义单条记录结构对应的C#代码

示例源码如下:

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


上面的记录有firstname、lastname、age三个字段组成。

S1-2:确定多条记录对应的C#代码

因为有多条记录组成,所以要使用下面的示例代码,确定多条记录情况下XML文件内容的格式,下面是示例代码,我们这里随便插入了三行记录

private List<Person> GeneratePersonData() { List<Person> data = new List<Person>(); data.Add(new Person() { FirstName = "Kate", LastName = "Brown", Age = 25 }); data.Add(new Person() { FirstName = "Tom", LastName = "Stone", Age = 63 }); data.Add(new Person() { FirstName = "Michael", LastName = "Liberty", Age = 37 }); return data; }


S1-3:现在记录集对应的的C#代码有了,下面的代码生成该记录集对应的示例XML文件内容

using System.Xml;

using System.Xml.Serialization;

using System.IO.IsolatedStorage;

using System.IO;

//这里省略若干行代码

private void writeToXML() { XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.Indent = true; StreamWriter stream = new StreamWriter("People.xml"); XmlSerializer serializer = new XmlSerializer(typeof(List<Person>)); using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings)) { serializer.Serialize(xmlWriter, GeneratePersonData()); } }


把上面几段代码插入到新建的WindowsForm项目中并运行会生成People.xml文件,查看这个文件有我们需要的XML文件格式。我们可以修改这个XML文件插入我们实际的记录集内容。

第二步:WP7项目中引入这个XML文件,并读取其内容

S2-1:在WP7项目的References结点中添加”System.Xml.Serialization”库

S2-2:在WP7项目中新建文件夹,起名为“MyResource”在该文件夹下新建MyPeople.xml,用我们刚才生成的People.XML文件的内容,替换MyPeople.xml中的内容。

MyPeople.xml的Copy to Output Directory属性得设成Copy if newer。

参考下图

S2-3:WP7项目中使用下面的代码读取MyPeople.xml中的内容

try { Uri uri = new Uri("MyResource/MyPeople.xml", UriKind.Relative); StreamResourceInfo sri = Application.GetResourceStream(uri); if (sri!=null) { XmlSerializer serializer = new XmlSerializer(typeof(List<Person>)); List<Person> data = (List<Person>)serializer.Deserialize(sri.Stream); this.listBox.ItemsSource = data; } } catch { //add some code here }


上面代码中的“listBox”控件由下面XAML的代码段定义

<ListBox x:Name="listBox"> <ListBox.ItemTemplate> <DataTemplate> <StackPanelMargin="10" > <TextBlockText="{Binding FirstName}"/> <TextBlockText="{Binding LastName}"/> <TextBlock Text="{BindingAge}"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

总结

通过上面的代码我们实现了从我们手工定义内容的XML文件中读取记录集。这里要注意的是[1]在WP7中使用的Stream Class同在WinForm项目中使用的Stream Class类型的不同。[2]借助第一步生成XML文件结构,然后在这个结构上我们把自己记录的内容替换上去,这样解析XML文件的时候,才不会出错。

下面附WP7项目中MainPage.xaml.cs的源码

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Xml; using System.Xml.Serialization; using System.IO.IsolatedStorage; using System.IO; using System.Windows.Resources; namespace PhoneApp3 { 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; } } } public partial class MainPage : PhoneApplicationPage { /* private List<Person> GeneratePersonData() { List<Person> data = new List<Person>(); data.Add(new Person() { FirstName = "Kate", LastName = "Brown", Age = 25 }); data.Add(new Person() { FirstName = "Tom", LastName = "Stone", Age = 63 }); data.Add(new Person() { FirstName = "Michael", LastName = "Liberty", Age = 37 }); return data; } private void writeToXML() { XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.Indent = true; using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("People.xml", FileMode.Create)) { XmlSerializer serializer = new XmlSerializer(typeof(List<Person>)); using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings)) { serializer.Serialize(xmlWriter, GeneratePersonData()); } } } } private void readFromXML() { try { using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("People.xml", FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(List<Person>)); List<Person> data = (List<Person>)serializer.Deserialize(stream); this.listBox.ItemsSource = data; } } } catch { //add some code here } } */ // Constructor public MainPage() { InitializeComponent(); //writeToXML(); //readFromXML(); try { Uri uri = new Uri("MyResource/MyPeople.xml", UriKind.Relative); StreamResourceInfo sri = Application.GetResourceStream(uri); if (sri!=null) { XmlSerializer serializer = new XmlSerializer(typeof(List<Person>)); List<Person> data = (List<Person>)serializer.Deserialize(sri.Stream); this.listBox.ItemsSource = data; } } catch { //add some code here } } } }


参考资料

[1]《WP7 Isolated Storage详解(5)-通过XmlSerializer读写XML文件》

http://www.cnblogs.com/zdave/archive/2011/05/23/2054344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值