Xamarin 中的 Xmlpullparser android
Xmlpullparser in Xamarin android
我正在尝试解析来自一个网站的 RSS 提要,但我在解析图像时遇到了困难。我想用该网站的图片替换我的占位符,当我尝试这样做时没有任何反应,我的占位符仍然存在,这是我来自 FeedService class:
的代码
try
{
WebRequest webRequest = WebRequest.Create(url);
WebResponse webResponse = webRequest.GetResponse();
Stream stream = webResponse.GetResponseStream();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(stream);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace("dc", xmlDocument.DocumentElement.GetNamespaceOfPrefix("dc"));
nsmgr.AddNamespace("content", xmlDocument.DocumentElement.GetNamespaceOfPrefix("content"));
XmlNodeList itemNodes = xmlDocument.SelectNodes("rss/channel/item");
for (int i = 0; i < itemNodes.Count; i++)
{
FeedItem feedItem = new FeedItem();
if (itemNodes[i].SelectSingleNode("title") != null)
{
feedItem.Title = itemNodes[i].SelectSingleNode("title").InnerText;
}
if (itemNodes[i].SelectSingleNode("image") != null)
{
feedItem.Title = itemNodes[i].SelectSingleNode("image").InnerText;
}
if (itemNodes[i].SelectSingleNode("link") != null)
{
feedItem.Link = itemNodes[i].SelectSingleNode("link").InnerText;
}
if (itemNodes[i].SelectSingleNode("pubDate") != null)
{
feedItem.PubDate = Convert.ToDateTime(itemNodes[i].SelectSingleNode("pubDate").InnerText);
}
if (itemNodes[i].SelectSingleNode("dc:creator", nsmgr) != null)
{
feedItem.Creator = itemNodes[i].SelectSingleNode("dc:creator", nsmgr).InnerText;
}
if (itemNodes[i].SelectSingleNode("category") != null)
{
feedItem.Category = itemNodes[i].SelectSingleNode("category").InnerText;
}
if (itemNodes[i].SelectSingleNode("description") != null)
{
feedItem.Description = itemNodes[i].SelectSingleNode("description").InnerText;
}
if (itemNodes[i].SelectSingleNode("content:encoded", nsmgr) != null)
{
feedItem.Content = itemNodes[i].SelectSingleNode("content:encoded", nsmgr).InnerText;
}
else
{
feedItem.Content = feedItem.Description;
}
feedItemsList.Add(feedItem);
}
}
catch (Exception)
{
throw;
}
return feedItemsList;
}
}
}
这是来自 FeedItemListAdapter class 的代码,我在其中尝试用网站上的图片替换占位符:
public override View GetView(int position, View convertView, ViewGroup parent)
{
var feedItem = this.feedsList[position];
var view = (convertView ?? context.LayoutInflater.Inflate(Resource.Layout.FeedItemListItemLayout, parent, false)) as LinearLayout;
view.FindViewById<TextView>(Resource.Id.title).Text = feedItem.Title.Length < 51 ? feedItem.Title : feedItem.Title.Substring(0, 50) + "...";
view.FindViewById<TextView>(Resource.Id.creator).Text = feedItem.Creator;
view.FindViewById<TextView>(Resource.Id.pubDate).Text = feedItem.PubDate.ToString("dd/MM/yyyy HH:mm");
ImageView imageView = view.FindViewById<ImageView>(Resource.Id.placeholder);
Koush.UrlImageViewHelper.SetUrlDrawable (imageView, feedItem.Image, Resource.Drawable.Placeholder);
return view;
}
}
}
和this is how it looks after I run it!
有人可以帮忙吗?
这可能是因为您在解析 RSS 图片节点的代码中有一个小错误:
feedItem.Title = itemNodes[i].SelectSingleNode("image").InnerText;
应该是图片而不是你设置的标题属性:
feedItem.Image = itemNodes[i].SelectSingleNode("image").InnerText;
我正在尝试解析来自一个网站的 RSS 提要,但我在解析图像时遇到了困难。我想用该网站的图片替换我的占位符,当我尝试这样做时没有任何反应,我的占位符仍然存在,这是我来自 FeedService class:
的代码 try
{
WebRequest webRequest = WebRequest.Create(url);
WebResponse webResponse = webRequest.GetResponse();
Stream stream = webResponse.GetResponseStream();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(stream);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace("dc", xmlDocument.DocumentElement.GetNamespaceOfPrefix("dc"));
nsmgr.AddNamespace("content", xmlDocument.DocumentElement.GetNamespaceOfPrefix("content"));
XmlNodeList itemNodes = xmlDocument.SelectNodes("rss/channel/item");
for (int i = 0; i < itemNodes.Count; i++)
{
FeedItem feedItem = new FeedItem();
if (itemNodes[i].SelectSingleNode("title") != null)
{
feedItem.Title = itemNodes[i].SelectSingleNode("title").InnerText;
}
if (itemNodes[i].SelectSingleNode("image") != null)
{
feedItem.Title = itemNodes[i].SelectSingleNode("image").InnerText;
}
if (itemNodes[i].SelectSingleNode("link") != null)
{
feedItem.Link = itemNodes[i].SelectSingleNode("link").InnerText;
}
if (itemNodes[i].SelectSingleNode("pubDate") != null)
{
feedItem.PubDate = Convert.ToDateTime(itemNodes[i].SelectSingleNode("pubDate").InnerText);
}
if (itemNodes[i].SelectSingleNode("dc:creator", nsmgr) != null)
{
feedItem.Creator = itemNodes[i].SelectSingleNode("dc:creator", nsmgr).InnerText;
}
if (itemNodes[i].SelectSingleNode("category") != null)
{
feedItem.Category = itemNodes[i].SelectSingleNode("category").InnerText;
}
if (itemNodes[i].SelectSingleNode("description") != null)
{
feedItem.Description = itemNodes[i].SelectSingleNode("description").InnerText;
}
if (itemNodes[i].SelectSingleNode("content:encoded", nsmgr) != null)
{
feedItem.Content = itemNodes[i].SelectSingleNode("content:encoded", nsmgr).InnerText;
}
else
{
feedItem.Content = feedItem.Description;
}
feedItemsList.Add(feedItem);
}
}
catch (Exception)
{
throw;
}
return feedItemsList;
}
}
}
这是来自 FeedItemListAdapter class 的代码,我在其中尝试用网站上的图片替换占位符:
public override View GetView(int position, View convertView, ViewGroup parent)
{
var feedItem = this.feedsList[position];
var view = (convertView ?? context.LayoutInflater.Inflate(Resource.Layout.FeedItemListItemLayout, parent, false)) as LinearLayout;
view.FindViewById<TextView>(Resource.Id.title).Text = feedItem.Title.Length < 51 ? feedItem.Title : feedItem.Title.Substring(0, 50) + "...";
view.FindViewById<TextView>(Resource.Id.creator).Text = feedItem.Creator;
view.FindViewById<TextView>(Resource.Id.pubDate).Text = feedItem.PubDate.ToString("dd/MM/yyyy HH:mm");
ImageView imageView = view.FindViewById<ImageView>(Resource.Id.placeholder);
Koush.UrlImageViewHelper.SetUrlDrawable (imageView, feedItem.Image, Resource.Drawable.Placeholder);
return view;
}
}
}
和this is how it looks after I run it!
有人可以帮忙吗?
这可能是因为您在解析 RSS 图片节点的代码中有一个小错误:
feedItem.Title = itemNodes[i].SelectSingleNode("image").InnerText;
应该是图片而不是你设置的标题属性:
feedItem.Image = itemNodes[i].SelectSingleNode("image").InnerText;