如何应用HttpUtility解码器

时间:2013-05-10 19:22:35

标签: c#

我第一次使用HttpUtility解码器。我是否将HttpUtility放在这段代码的末尾(下方)?或者我创建一个新方法并通过它运行字符串?另一个警告,下面的代码引用了一个类名Utils,其中有一些XML解析正在进行中。如果解决方案是创建一个新方法,那么在XML解析之后放置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;
}

1 个答案:

答案 0 :(得分:0)

如果您可以修改Utils.cs,您可以使用HttpUtility.HtmlDecode包装Title和Url分配

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

或者你可以在你的LoadFeed方法中用它包装e.Result

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