WP7中关于XML文件的读取,过滤,绑定的几种方法


我们在做第三方应用开发时经常会用到Linq来定向的解析查询所得到的XML文件,本文是自己在做WP7第三方新浪微博客户端,人人网客户端时所采用的几种方法,希望对大家有所帮助,废话少说,上正文。
首先看以下两个XML文件:
Students.xml
StudentInfo.xml
下面创建一个Model类,来对数据进行存取。
?
public class Model
    {
        string headurl= "" ;
        string nameurl= "" ;
        int age;
 
        public string HeadUrl { get ; set ; }
        public string Name { get ; set ; }
        public int Age { get ; set ; }
    }
这是前台代码,主要是控件的摆放和绑定操作:
为了读取XML文件中的信息,我们需要添加一个.Net库支持 System.Xml.Linq.我们会使用到里面的XDocument相关类的操作。
接下来我们进行查询及绑定,直接看代码吧:
?
XDocument xdoc = XDocument.Load( "Students.xml" );
            var student = from query in xdoc.Descendants( "user" )
                          select new Model
                          {
                              HeadUrl = ( string )query.Element( "headurl" ),
                              Name = ( string )query.Element( "name" ),
                              Age=( int )query.Element( "age" )
                          };
            this .listBox1.ItemsSource = student;
效果如下图:
要进行数据的过滤操作,需要对各个元素的属性值进行判断,我们使用下面那个StudentsInfo文件进行判断,当然用Students也可以,这里就不多说了。继续看代码:
?
XDocument xdoc1 = XDocument.Load( "StudentsInfo.xml" );
             var student1 = from query in xdoc1.Descendants( "user" )
                            where query.Attribute( "age" ).Value == "20"
                           select new Model
                           {
                               HeadUrl = query.Attribute( "headurl" ).Value,
                               Name = query.Attribute( "name" ).Value,
                               Age = int .Parse(query.Attribute( "age" ).Value)
                           };
             this .listBox2.ItemsSource = student1;
为了醒目我将上面两个例子放在一起显示,如图:
下面是一个按某个元素来进行排序的例子,我们就按年龄来对刚才的数据进行一个升序排列:
?
XDocument xdoc1 = XDocument.Load( "StudentsInfo.xml" );
             var student1 = from query in xdoc1.Descendants( "user" )
                            orderby int .Parse(query.Attribute( "age" ).Value) ascending
                           select new Model
                           {
                               HeadUrl = query.Attribute( "headurl" ).Value,
                               Name = query.Attribute( "name" ).Value,
                               Age = int .Parse(query.Attribute( "age" ).Value)
                           };
             this .listBox2.ItemsSource = student1;
注意:按降序排列的话就把ascending改成descending可以了,默认是按升序排列的。
看图:
下面再介绍另一种查找方法,感觉也非常实用:
?
public ObservableCollection<Model> studentCollection { get ; private set ; }
 
XDocument xdoc2 = XDocument.Load( "Students.xml" );
            studentCollection = new ObservableCollection<Model>();
            foreach (XElement element in xdoc2.Element( "Student" ).Descendants( "user" ))
            {
                studentCollection.Add( new Model()
                 {
                     HeadUrl = element.Element( "headurl" ).Value,
                     Name = element.Element( "name" ).Value,
                     Age =Int32.Parse(element.Element( "age" ).Value)
                 });
            }
            this .listBox1.ItemsSource = studentCollection;
效果如下:
要进行数据的筛选等操作只需要在foreach里面进行判断就可以了,也是很方便的。而且使用了ObservableCollection这个集合,操作起来也会十分方便。
先介绍这些吧,以后有空再进行深入介绍。
下面是示例的Demo:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值