我第一次使用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;
}
答案 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");
});