WinRT知识积累1之读xml数据
前述:这个知识是在Windows8.1或WP8.1中运用Linq to xml获取一个xml文件里的数据。(网上也很多类似的知识,可以借鉴参考)
平台:windows8.1 metro 或者WP8.1
步骤:1、在项目中准备一个xml文件。我在项目中建立了一个city.xml,如图:

city.xml具体代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<China>
<city>
<id>1</id>
<name>北京</name>
<description>中国的首都</description>
</city>
<city>
<id>2</id>
<name>深圳</name>
<description>经济繁荣</description>
</city>
<city>
<id>3</id>
<name>广州</name>
<description>很大的城市</description>
</city>
<city>
<id>4</id>
<name>香港</name>
<description>亚洲金融中心</description>
</city>
<province>
<id>1</id>
<name>广东省</name>
<city>
<id>5</id>
<name>佛山</name>
<description>功夫之地</description>
</city>
<city>
<id>6</id>
<name>河源</name>
<description>天是蓝的</description>
</city>
</province>
</China>
2、创建一个对应city.xml的sampldata类
代码如下:
public class City
{
private int id; public int Id
{
get { return id; }
set { id = value; }
}
private string name; public string Name
{
get { return name; }
set { name = value; }
}
private string description; public string Description
{
get { return description; }
set { description = value; }
}
}
public class Province//这个是为了测试
{
private int id; public int Id
{
get { return id; }
set { id = value; }
}
private string name; public string Name
{
get { return name; }
set { name = value; }
} private List<City> cities; public List<City> Cities
{
get { return cities; }
set { cities = value; }
}
3、UI布局(在WP8.1上,布局效果可以更好看点)
MainPage.xmal代码如下:
<StackPanel Orientation="Horizontal">
<Button Name="getxml" Content="获取数据1" Width="" Height="" VerticalAlignment="Top" Click="getxml_Click"/>
<Button Name="getxml2" Content="获取数据2" Width="" Height="" VerticalAlignment="Top" Click="getxml2_Click" Margin="80,0,0,0"/>
</StackPanel>
<ListView x:Name="datalist" Margin="0, 50,0,0">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Id}" Style="{ThemeResource TitleTextBlockStyle}"/>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}" Style="{ThemeResource ListViewItemContentTextBlockStyle}"/>
<TextBlock Text="{Binding Description}" Style="{ThemeResource BodyTextBlockStyle}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
4、后台具体代码
Note:这里需要 using System.Xml.Linq;
两个Button的点击事件代码如下:
private async void getxml_Click(object sender, RoutedEventArgs e)
{
//在windows8.1中还可以获取xml文件,但在WP8.1会出错,我不知道为什么,求解释
//string path = Path.Combine(Package.Current.InstalledLocation.Path, "DataModel/city.xml");//文件Uri
//XDocument xmlfile = XDocument.Load(path); //在Windows8.1和WP8.1中都可以执行,获取xml文件
XDocument xmlfile;
Uri fileUri = new Uri(@"ms-appx:///DataModel/city.xml");//ms-appx:// 为安装目录
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(fileUri);//获取city.xml文件, XDocument.Load()可利用stream,Uri,xmlreader等几种方法获取文件
using (var stream = await file.OpenStreamForReadAsync())//文件操作都要转换成流
{
xmlfile = XDocument.Load(stream);
}; var data = from query in xmlfile.Descendants("city")//获取city.xml中所有名为city节点
select new City
{
Id = (int)query.Element("id"),
Name = (string)query.Element("name"),
Description = (string)query.Element("description")
};
datalist.ItemsSource = data;
} private async void getxml2_Click(object sender, RoutedEventArgs e)
{
datalist.ItemsSource = null;
XDocument xmlfile;
Uri fileUri = new Uri(@"ms-appx:///DataModel/city.xml");//ms-appx:// 为安装目录
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(fileUri);//获取city.xml文件
using (var stream = await file.OpenStreamForReadAsync())//文件操作都要转换成流
{
xmlfile = XDocument.Load(stream);
};
var data = from query in xmlfile.Descendants("city")
where (string)query.Parent.Element("name") =="广东省"//linq to xml 选择id<3的city
orderby (int)query.Element("id")
select new City
{
Id = (int)query.Element("id"),
Name = (string)query.Element("name"),
Description = (string)query.Element("description")
};
datalist.ItemsSource = data;
}
上面主要运用了Linq to xml, 需要注意的是Windows8.1和WP8.1在获取xml文件的方法有点差异,或者我哪里弄错了,请大家指出。还有请大家教下我怎样利用LINQ把province节点的数据绑定到Province类上,并给data赋值。
运行效果:
点击获取数据1按钮,效果如图: 点击获取数据2按钮,效果如图:

-----------------------------------------------------------------------------------------------------------个人总结
写完了这个知识积累了,自学这些编程真的有点学得慢,有个人带就好了啊。又要去复习集成电源和嵌入式了,为了明天下午的考试=.=还有明天上午要去财富世纪广场面试.Net实习生了,不知道凭借自己的现在的知识能不能通过,希望顺顺利利。
WinRT知识积累1之读xml数据的更多相关文章
- 机器学习等知识--- map/reduce, python 读json数据。。。
map/ reduce 了解: 简单介绍map/reduce 模式: http://www.csdn.net/article/2013-01-07/2813477-confused-about-map ...
- WinRT知识积累2之MessageDialog应用代码
private void NavigationHelper_SaveState(object sender, SaveStateEventArgs e) { // TODO: 在此处保存页面的唯一状态 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Asp.net MVC知识积累
一.知识积累 http://yuangang.cnblogs.com/ 跟蓝狐学mvc教程专题目录:http://www.lanhusoft.com/Article/169.html 依赖注入:htt ...
- J2EE 基础知识积累
1. 面向对象的思维: 1. 有哪些类 那些对象 2. 这些类中,每种类应该具有某种属性和方法 3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...
- (四)SAX方式解析XML数据
SAX方式解析XML数据 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...
- 网络相关系列之四:数据解析之SAX方式解析XML数据
一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据 ...
- 数据库相关知识积累(sqlserver、oracle、mysql)
数据库相关知识积累(sqlserver.oracle.mysql) 1. sqlserver :断开所有连接: (还原数据库) 1.数据库 分离 2. USE master GO ALTER DAT ...
- Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
XML数据默认是不能在客户端通过Ajax跨域请求读取的,一般的做法是在服务器上写一个简单的代理程序,将远程XML的数据先读到本地服务器,然后客户端再从本地服务器通过Ajax来请求.由于我们不能对数据源 ...
随机推荐
- MySql5.7.12设置log-bin
什么是binlog日志 binlog日志记录了MySql数据库的增加.删除.修改操作.用来实现MySql主从复制. 设置binlog日志 在my.cnf中配置binlog日志 [mysqld] log ...
- install cygwin
make clean
- javaIO框架小析
IO即数据读写.数据是应用的中心要素,而数据读写的能力和可扩展性是编程平台的基础支撑. 概念框架 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : ...
- php将抓取的图片链接下载到本地
备注: fclose这一步操作完成之后如果返回值是空表示下载成功,否则会返回1或者其他错误提示 这个步骤测试的时候实在yii2框架的基础上执行的,下载到的图片实在frontend目录下的web目录下( ...
- 十五、JDBC操作数据库
1.数据库特点 实现数据共享.减少数据的冗余度.数据的独立性.数据集中控制.数据的一致性和可维护性. 2.数据库种类和功能 (1)层次型数据库:类似于树结构,是一组通过链接而互相联系在一起的记录. ( ...
- [HIHO1196]高斯消元·二(高斯消元、枚举自由变元)
题目链接:http://hihocoder.com/problemset/problem/1196 #include <bits/stdc++.h> using namespace std ...
- Extjs关于alert显示不出—异步问题
对应extjs提示框不能正常显示,而使用js的本身提示框可以正常,但由于样式不统一,不是 好的解决方法. 解决该问题,要了解extjs异步原理. ext的提示框都是异步的,非阻塞模式的,浏览器js的提 ...
- MFC编程入门之十六(对话框:消息对话框)
前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消息对话 ...
- DEELX 正则表达式引擎(v1.2)
DEELX 正则表达式引擎(v1.2) 简介见文末. 选择使用deelx的理由:全部代码位于一个头文件(.h)中, 比任何引擎都使用简单和方便. 利用分组从字符串当中提取出化学元素英文名.比如 Ag, ...
- Linux 远程桌面 访问 WIndows
1. Debain 系列 linux sudo aptitude install rdesktop 2. Connect rdesktop <hostname> -r sound:off ...