0

我第一次不得不使用HttpUtility解码器。我是否将 放在HttpUtility这段代码的末尾(如下)?还是我创建一个新方法并通过它运行字符串?另一个需要注意的是,下面的代码引用了一个类名Utils,其中正在进行一些 XML 解析。HttpUtility如果解决方案是创建一个新方法,在 XML 解析之后放置是否正确?

在 XML 解析结束时,该方法将解析交给链接“返回链接”。然后我是否需要将解析移交给HttpUtility,并在移交结束时HttpUtility将结果移交给链接?Utils.CS粘贴在 Web 客户端代码下方。

抱歉这个冗长的问题,我只编码了大约 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;
}
4

1 回答 1

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");
});
于 2013-05-10T20:50:40.517 回答