在一个WP7的项目中,需要读取一个配置文件,这个配置文件无需改动,直接读取就可以。可以用以下的方式来实现读取:
在项目中添加AllLevels.xml文件,格式如下:
BuildAction设置为Content,然后在代码中读取:
- XDocument xdoc = XDocument.Load("AllLevels.xml");
- listLevels = new List();
- foreach (XElement element in xdoc.Element("Levels").Descendants("Level"))
- {
- Level level = new Level();
- level.LevelID = int.Parse(element.Element("LevelID").Value);
- level.Content = element.Element("Content").Value;
- level.Difficulty = int.Parse(element.Element("Difficulty").Value);
- //level.Difficulty = 0;
- level.LevelName = element.Element("LevelName").Value;
- level.MinSteps = int.Parse(element.Element("MinSteps").Value);
- evel.rcnt = int.Parse(element.Element("rcnt").Value);
- level.UserID = int.Parse(element.Element("UserID").Value);
- level.UserName = element.Element("UserName").Value;
- listLevels.Add(level);
- }
这样生成xap后,用winrar解压缩就可以看到这个AllLevels.xml文件,有时候这样不太安全,可以将其编译到dll中。将 BuildAction设置成Resource就可以将文件编译到dll里了,初学WP7的话很容易遇到图片无法显示的问题,就是因为图片一般要设置成 Content,而不是Resource。
设置成Resource以后就不能直接这样了
1. XDocument.Load("AllLevels.xml");
可以写完整的Uri路径,或者读取Stream,用以下的方法:(这两种都可以)
- //设置成Resource属性时 用Load方法读取Stream
- //Stream stream = App.GetResourceStream(new Uri("HRD;component/AllLevels.xml", UriKind.Relative)).Stream;
- //XDocument xdoc = XDocument.Load(stream);
- //设置成Resource属性时 用Load方法读取uri
- Uri uri = new Uri("/HRD;component/AllLevels.xml", UriKind.Relative);
- XDocument xdoc = XDocument.Load(uri.ToString());
这样编译出来的xap中就看不到这个xml文件了,已经被编译到dll里了。
除了用 1. XElement element in xdoc.Element("Levels").Descendants("Level")
这样的读取方式外,还可以直接用xml序列化的方式:比如:
- //另一种读取方法
- Uri uri = new Uri("MyResource/MyPeople.xml", UriKind.Relative);
- StreamResourceInfo sri = Application.GetResourceStream(uri);
- if (sri != null)
- {
- XmlSerializer serializer = new XmlSerializer(typeof(List));
- List data = (List)serializer.Deserialize(sri.Stream);
- this.listBox.ItemsSource = data;
- }
参考以下文章:
http://bbs.wpdever.com/thread-3161-1-1.html