CaseStudy(showcase)数据篇-从XML中获取数据

做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy。

数据篇-从XML中获取数据

这个项目我的后台用的是asp.net开发。由于规模比较小我的数据层用的是subsonic。用它来做开发会比较敏捷。

这一回我选择的数据方式是asp.net生成xml,用silverlight中的Linq来实例化成具体的类。

这里我以读取类别信息为例子,分为3步:

  1. 定义xml
  2. <? xml version="1.0" encoding="utf-8"  ?>
    < categories >
    < category >< cid > 2 </ cid >< title > Dumex </ title ></ category >
    < category >< cid > 1 </ cid >< title > MySVW </ title ></ category >
    < category >< cid > 3 </ cid >< title > Microsoft </ title ></ category >
    </ categories >
  3. 定义实体类
  4.       public   class  Category
        {
            
    public   int  cid {  get set ; }
            
    public   string  title {  get set ; }
        }
       
  5. 用linq读取
                WebClient client  =   new  WebClient();
                client.DownloadStringAsync(
    new  Uri(HtmlPage.Document.DocumentUri,  " category.ashx " ));
                client.DownloadStringCompleted 
    +=   new  DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
                
            
    void  client_DownloadStringCompleted( object  sender, DownloadStringCompletedEventArgs e)
            {
                XmlReader reader 
    =  XmlReader.Create( new  StringReader(e.Result));
                XDocument document 
    =  XDocument.Load(reader);
                var categories 
    =  from c  in  document.Descendants( " category " )
                                 select 
    new  Category
                                 {
                                     cid 
    =   int .Parse(c.Element( " cid " ).Value),
                                     title 
    =  c.Element( " title " ).Value
                                 };

                
    // todo 
            }    
          
         

在这里我选用了ashx来配合subsonic生成xml文件

<% @ WebHandler Language = " C# "  Class = " category "   %>

using  System;
using  System.Web;
using  System.Text;


public   class  category : IHttpHandler {
    StringBuilder sb 
=   new  StringBuilder();
    
string  templateStr  =   " <category> "   +
                            
" <cid>{0}</cid> "   +
                            
" <title>{1}</title> "   +
                            
" </category> " ;
    
public   void  ProcessRequest (HttpContext context) {
        context.Response.ContentType 
=   " text/xml " ;
        SC.CategoryCollection cc 
=   new  SC.CategoryCollection();
        SubSonic.Query query 
=  SC.Category.Query().ORDER_BY( " sortid " " desc " );
        cc.LoadAndCloseReader(query.ExecuteReader());
        sb.AppendLine(
" <?xml version=\ " 1.0 \ "  encoding=\ " utf - 8 \ "  ?> " );
        sb.AppendLine(
" <categories> " );
        
for  ( int  i  =   0 ; i  <  cc.Count; i ++ ) {
            sb.AppendLine(
string .Format(templateStr, cc[i].Id, cc[i].Title));
        }
        sb.AppendLine(
" </categories> " );
        context.Response.Write(sb.ToString());
    }
 
    
public   bool  IsReusable {
        
get  {
            
return   false ;
        }
    }

}

 


作者:nasa
出处:nasa.cnblogs.com
联系:[email protected]
QQ:12446006

你可能感兴趣的:(case)