zoukankan      html  css  js  c++  java
  • 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 { getset; }
              
      public string title { getset; }
          }
         
    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
    联系:nasa_wz@hotmail.com
    QQ:12446006

  • 相关阅读:
    Qt判断文件夹是否存在并新建文件夹
    QFileDialog的使用
    C++11 std::chrono库详解
    disconnected no supported authentication methods available(server sent: publickey)
    connect函数的第5参数Qt::ConnectionType
    在C++ 中检查一个文件是否存在的几种方法
    win10打开便签
    1024. Palindromic Number (25)
    1023. Have Fun with Numbers (20)
    1021. Deepest Root (25)
  • 原文地址:https://www.cnblogs.com/nasa/p/1248968.html
Copyright © 2011-2022 走看看