XML的LINQ读取多个节点
我试图从一个WordPress博客XML饲料的数据,这是XML的格式:http://brockallen.com/category/asp-net/feed/XML的LINQ读取多个节点
var xElements = XElement.Parse(ResponseText);
var blogs = (from temp in xElements.Elements()
select new
{
Title = temp.Element("item").Element("title").Value,
URL = temp.Element("item").Element("link").Value,
Image = temp.Element("item").Element("media:content").Value
}).FirstOrDefault();
如何让他们所有,并将它们存储到一个东西?
上media:content
错误是说的“:”字符,十六进制值0x3A,不能包含在name.`
当我删除了这一行,就只得到一个,当有更多的,即使删除后FirstOrDefault()
尝试......与命名空间更新的查询content
元素
// var xDoc = XDocument.Load(@"<your xml location>");
var xDoc = XDocument.Parse("<your xml string>");
XNamespace ns = "http://search.yahoo.com/mrss/";
var blogs = (from temp in xDoc.Descendants().Elements("item")
select new
{
Title = temp.Element("title").Value,
URL = temp.Element("link").Value,
Image = temp.Element(ns + "content").Value
});
这样,您只能获得每个媒体项目的第一个媒体项目标题,虽然你的文档 – 2014-09-22 16:04:58
中有很多文件可以获得所有内容元素,只需使用Image = temp.Elements(ns +“content”)'或者只需要图像url就可以了 - Image = temp .Elements(ns +“content”)。属性(“url”)' – 2014-09-22 16:09:01
您正在处理文档的错误级别。 你也需要一个命名空间。
XNamespace media = "http://search.yahoo.com/mrss/";
var items =
from channelElement in XElement.Parse(ResponseText).Element("channel").Elements("item")
select new {
Title = channelElement.Element("title").Value,
Url = channelElement.Element("link").Value,
MediaItems = (
from mediaItemElement in channelElement.Elements(media + "content")
select new {
url = mediaItemElement.Attribute("url").Value,
medium = mediaItemElement.Attribute("medium").Value
}
).ToList()
};
是的,这个工程很好。谢谢..除了在我尝试获取'media:content'节点时抛出一个错误:'':'字符,十六进制值0x3A,不能包含在名称中。' – 2014-09-22 15:38:19
@ZeeTee:这是因为它使用*名称空间*带有“媒体”的别名。使用LINQ to XML中的名称空间进行查找。 – 2014-09-22 15:38:52
有没有一种方法可以轻松地将其插入到您的代码中,还是比您的代码更大的任务 – 2014-09-22 15:40:24
你显式调用'FirstOrDefault'。如果你不只是想要第一个项目,不要那样:) – 2014-09-22 15:19:29
@JonSkeet嗯,我把它拿出来,它的工作原理,但仍然只返回1,当有更多的 – 2014-09-22 15:21:15
'博客'变量只有'[ 0]'= 1结果查看 – 2014-09-22 15:23:50