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="100" Height="40" VerticalAlignment="Top" Click="getxml_Click"/><Button Name="getxml2" Content="獲取數據2" Width="100" Height="40" 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的cityorderby (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實習生了,不知道憑借自己的現在的知識能不能通過,希望順順利利。
?
轉載于:https://www.cnblogs.com/NEIL-X/p/4221319.html
總結
以上是生活随笔為你收集整理的WinRT知识积累1之读xml数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于jQuery带图标的多级下拉菜单
- 下一篇: new LayoutParams 使用