新闻阅读器 几个难点的 代码实现
一、下载RSS的xml内容,并且解析
public void UpdateArticles()
{
    try
    {
        this.Articles.Clear();
        Article art;
        WebClient wc = new WebClient();
        XmlDocument doc = new XmlDocument();
        wc.DownloadFile(this.Url, "temp.xml");
        doc.Load("temp.xml");
        XmlNode docname = doc.DocumentElement;
        switch (docname.Name.ToLower())
        {
            case "rss":
                foreach (XmlNode fxn in docname.FirstChild.ChildNodes)
                {
                    if (fxn.Name == "item")
                    {
                        art = new Article();
                        foreach (XmlNode sxn in fxn.ChildNodes)
                        {
                            switch (sxn.Name)
                            {
                                case "title":
                                    art.Title = sxn.InnerText.Trim();
                                    break;
                                case "link":
                                    art.Url = sxn.InnerText.Trim();
                                    break;
                            }
                        }
                        Articles.Add(art.Title, art);
                    }
                }
                break;
            case "feed":
                foreach (XmlNode sxn in docname.ChildNodes)
                {
                    if (sxn.Name == "entry")
                    {
                        art = new Article();
                        foreach (XmlNode cxn in sxn)
                        {
                            switch (cxn.Name)
                            {
                                case "title":
                                    art.Title = cxn.InnerText.Trim();
                                    break;
                                case "link":
                                    art.Url = cxn.Attributes["href"].Value.ToString().Trim();
                                    break;
                            }
                        }
                        this.Articles.Add(art.Title, art);
                    }
                }
                break;
        }
    }
    catch (Exception)
    {
        System.Windows.Forms.MessageBox.Show("请检查网络连接!");
    }
}
二、持久化的存储和读取,使用序列化技术
public void Save()
{
    FileStream fs = new FileStream(temp, FileMode.OpenOrCreate, FileAccess.Write);
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(fs, feed);
    fs.Close();
}
public void Load()
{
    try
    {
        if (!File.Exists(temp)) return;
        FileStream fs = new FileStream(temp, FileMode.OpenOrCreate, FileAccess.Read);
        BinaryFormatter bf = new BinaryFormatter();
        this.feed = bf.Deserialize(fs) as List<Feed>;
        fs.Close();
    }
    catch
    {
        if (this.feed == null) this.feed = new List<Feed>();
    }
}