我正在尝试用C#解析Windows Phone网站的xml,但未能找到获取数据的结果,问题出在我的问题上
var rssFeed = XElement.Parse(response);
var channel = rssFeed.Descendants("feed");
var items = (from item in channel.Elements("entry") select new ItemsLoad
我无法找到获得结果的方法,任何想法?求救!
public class ItemsLoad
{
public string Title { get; set; }
public string Link { get; set; }
public string Description { get; set; }
public string PubDate { get; set; }
public static List<ItemsLoad> GetElements(string response)
{
var rssFeed = XElement.Parse(response);
var channel = rssFeed.Descendants("feed");
var items = (from item in channel.Elements("entry")
select new ItemsLoad
{
Title = item.Element("title").Value,
Link = item.Element("link").Value,
Description = item.Element("summary").Value,
PubDate = item.Element("published").Value
});
return items.ToList();
}
我的完整代码
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/">
<id>index.xml</id>
<title>Last</title>
<updated>2014-10-13T06:17:44+00:00</updated>
<author>
<name>John</name>
<email>John dot com</email>
<uri>this-is-test.com</uri>
</author>
<entry>
<id>213213</id>
<published>2014-09-17T10:45:36+00:00</published>
<title xml:lang="en">Test</title>
<summary xml:lang="en">Test xml windows phone</summary>
<link rel="alternate"
type="text/html"
href="http://www"
title="story">
<media:content>
<media:thumbnail url="tese.jpg"
width="106"
height="60">
<img alt="test"
width="106"
height="60"
src="test.jpg"/>
</media:thumbnail>
<media:thumbnail url="test.jpg"
width="144"
height="81">
<img alt="test"
width="144"
height="81"
src="test.jpg"/>
</media:thumbnail>
</media:content>
</link>
</entry>
</feed>
这是xml文件
三江源
答案 0 :(得分:0)
您的代码存在两个问题:
解析XML后,feed
已经是当前节点,因此rssFeed.Descendants("feed")
找不到任何内容
元素有一个命名空间(xmlns="..."
上的feed
),你需要在解析节点时提供它:
public static List<ItemsLoad> GetElements(string response)
{
const string Namespace = "http://www.w3.org/2005/Atom";
var rssFeed = XElement.Parse(response);
var items = (from item in rssFeed.Elements(XName.Get("entry", Namespace))
select new ItemsLoad
{
Title = item.Element(XName.Get("title", Namespace)).Value,
Link = item.Element(XName.Get("link", Namespace)).Value,
Description = item.Element(XName.Get("summary", Namespace)).Value,
PubDate = item.Element(XName.Get("published", Namespace)).Value
});
return items.ToList();
}