在wp7中读取XML的配置文件,Content与Resource的区别

在一个WP7的项目中,需要读取一个配置文件,这个配置文件无需改动,直接读取就可以。可以用以下的方式来实现读取:
在项目中添加Levels.xml文件,格式如下:

<?xml version="1.0" encoding="utf-8"?>
<Levels>
	<Level>
		<LevelID>48</LevelID>
		<LevelName>走投无路(注:此布局无解)</LevelName>
		<Content>2,0,0,4,1,0,2,3,0,2,0,2,2,1,2,1,2,2,2,3,2,1,2,3,1,0,4,1,3,4</Content>
		<rcnt>0</rcnt>
		<MinSteps>0</MinSteps>
		<UserID>1</UserID>
		<UserName>admin</UserName>
    <Difficulty>7</Difficulty>
	</Level>
	<Level>
		<LevelID>252</LevelID>
		<LevelName>7系列:七步成诗</LevelName>
		<Content>2,0,0,2,1,0,2,3,0,2,0,2,2,1,2,4,2,2,1,0,4,1,1,4,1,2,4,1,3,4</Content>
		<rcnt>255</rcnt>
		<MinSteps>7</MinSteps>
		<UserID>765</UserID>
		<UserName>艾恩</UserName>
		<Difficulty>0</Difficulty>
	</Level>
</Levels>


BuildAction设置为Content,然后在代码中读取:

XDocument xdoc = XDocument.Load("AllLevels.xml");
listLevels = new List<Level>();
                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);
                    level.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解压缩就可以看到这个Levels.xml文件,有时候这样不太安全,可以将其编译到dll中。将BuildAction设置成Resource就可以将文件编译到dll里了,初学WP7的话很容易遇到图片无法显示的问题,就是因为图片一般要设置成Content,而不是Resource。

设置成Resource以后就不能直接这样了

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里了。

除了用
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<Person>));
                //    List<Person> data = (List<Person>)serializer.Deserialize(sri.Stream);
                //    this.listBox.ItemsSource = data;
                //}  

参考以下文章:
http://blog.csdn.net/lee353086/article/details/6674095
http://www.silverlightchina.net/html/zhuantixilie/winphone7/2010/1207/3966.html?1292140571
http://www.cnblogs.com/tianyutingxy/archive/2011/02/27/1966267.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值