Windows Phone7的解析问题
本文关键字:问题 Phone7 Windows | 更新日期: 2023-09-27 18:18:56
我正在使用Windows Phone 7开发一个应用程序,它可以显示来自特定URI的数据,但它无法工作。我是斯塔克,请帮帮我。这是我的XML:
<rss version="2.0">
<channel>
<title>info</title>
<link>http://www.info.net</link>
<description>Trouvez toutes les actualités en direct sur info.net ...</description>
<language>fr</language>
<copyright></copyright>
<pubDate></pubDate>
<image>
<url></url>
<title></title>
<link>http://www.info.net</link>
<width>200</width>
<height>200</height>
</image>
<item>
<title>Actualités » Info News » News Régionales : Main info</title>
<link>http://www.info.net/fr/actualite/actualites_info-news_news-regionales/my-main-info/54</link>
<pubDate>Thu, 29 Dec 2011 00:22:00 +0100</pubDate>
<description><![CDATA[<img align='left' width='139' src='http://www.info.net/uploads/content/thumbnails/2011122902313__news.jpg'> My main info details : ...]]></description>
</item><item>
.
.
.
</item></channel></rss>
我想显示一个包含以下内容的列表:
Main info (title)
http://www.info.net/uploads/content/thumbnails/2011122902313__news.jpg (description)
My main info details (description)
这是我的c#代码:
var doc = XDocument.Load(new StringReader(e.Result));
var items = from c in doc.Descendants("item")
select new RSSitem()
{
Title = c.Element("title").Value,
Photo = c.Element("img").Attribute("src").Value,
Description = c.Element("description").Value,
Link = c.Element("link").Value,
};
ListBoxNews.ItemsSource = items;
<img>
标记不是XML文档的一部分,而是description元素的CDATA节点中的HTML元素。
要提取它,你需要使用htmllagilitypack (HtmlAgilityPack
在NuGet)。
这是你的代码的更新版本:
(我将您的LINQ表达式转换为使用扩展方法,因为顺序代码在LINQ表达式中不能很好地工作)
var items = doc.Descendants("item")
.Select(c =>
{
string descriptionHtml = c.Element("description").Value;
HtmlDocument descriptionDoc = new HtmlDocument();
descriptionDoc.LoadHtml(descriptionHtml);
HtmlNode imageNode = doc.DocumentNode.SelectSingleNode("//img[@src]");
string imageUrl = (imageNode != null)
? imageNode.GetAttributeValue("src", null)
: null;
// This might need further looking at, depending on your HTML
string description = doc.DocumentNode.InnerText;
return new RSSitem()
{
Title = c.Element("title").Value,
Photo = imageUrl,
Description = description,
Link = c.Element("link").Value,
};
}).ToList();
为c数据节点,如
XmlNode cDataNode = doc.SelectSingleNode("channel/description").ChildNodes[0];
string finalData = cDataNode.InnerText.Trim();