2013-05-10 14 views
0

第一次我不得不使用HttpUtility解碼器。我是否將HttpUtility放在這段代碼的末尾?或者我創建一個新的方法並通過它來運行字符串?另一個需要注意的代碼是指類名Utils,其中有一些XML解析正在進行。如果解決方案是創建一個新的方法,在XML解析之後放置HttpUtility是否正確?如何應用HttpUtility解碼器

在XML解析結束時,該方法將解析切換到鏈接「返回鏈接」。那麼我是否需要將解析結果交給HttpUtility,並在HttpUtility結束時將結果交給鏈接?在網絡客戶端代碼下面粘貼了Utils.CS

對不起,這個冗長的問題,我只編寫了大約8個月,並沒有遇到任何情況。

public void LoadFeed() 
{ 
     //check if network and client are available 
     if (NetworkInterface.GetIsNetworkAvailable() && !String.IsNullOrEmpty(uri)) 
     { 
      LoadingState = LoadingState.LOADING; 
      RaisePropertyChanged("LoadingState"); 
      var wc = new WebClient(); 
      wc.DownloadStringCompleted += (sender, e) => 

      { 
       if (e.Error == null) 
       { 
        Deployment.Current.Dispatcher.BeginInvoke(() => 
        { 
         LoadingState = LoadingState.COMPLETED; 
         FeedLinks = Utils.GetLinksFromFeed(e.Result); 
         RaisePropertyChanged("FeedLinks"); 
         RaisePropertyChanged("LoadingState"); 
        }); 
       } 
      }; 
      wc.DownloadStringAsync(new Uri(uri, UriKind.Absolute)); 
     } 
     else 
     { 
      LoadingState = LoadingState.ERROR; 
      RaisePropertyChanged("LoadingState"); 
     } 

Utils.CS

public static List<Link> GetLinksFromFeed(string xmlString) 
{ 
     List<Link> links = null; 

     //try to parse result as rss feed 
     XDocument doc = XDocument.Parse(xmlString); 
     //grab default namespace 
     XNamespace xName = doc.Root.GetDefaultNamespace(); 
     //parse items 
     links = (from item in doc.Descendants(xName + "item") 
       select new Link 
       { 
        Title = item.Element(xName + "title").Value, 
        Url = item.Element(xName + "link").Value, 
       }).ToList<Link>(); 

     return links; 
} 

回答

0

如果你可以修改Utils.cs,你可以用HttpUtility.HtmlDecode包裹的標題和URL分配

... 
select new Link 
{ 
    Title = HttpUtility.HtmlDecode(item.Element(xName + "title").Value), 
    Url = HttpUtility.HtmlDecode(item.Element(xName + "link").Value), 
}).ToList<Link>(); 
... 

或者你可以用e.Result與它在你的LoadFeed方法

... 
Deployment.Current.Dispatcher.BeginInvoke(() => 
{ 
    LoadingState = LoadingState.COMPLETED; 
    FeedLinks = Utils.GetLinksFromFeed(HttpUtility.HtmlDecode(e.Result)); 
    RaisePropertyChanged("FeedLinks"); 
    RaisePropertyChanged("LoadingState"); 
}); 
+0

工作很好。很多......非常感謝。我將這個包裝器添加到了Utils.cs類中,一切都很好。 – 2013-05-11 03:03:12