这是我的示例xml文件:
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<entry>
<title>Title goes here</title>
<author><name>None</name></author>
<source>
<title>Adhocs Source - Adhocs Section</title>
<id>None</id>
<updated>2015-07-21T17:45:20.387248Z</updated>
</source>
<link rel="alternate" href="http://www.example.com/" />
<id>http://www.example.com/</id>
<updated>2015-07-21T17:45:20.387248Z</updated>
<published>2015-07-21T17:45:20.387248Z</published>
<summary>sample desc goes here...</summary>
<media:thumbnail
xmlns:media="http://search.yahoo.com/mrss/"
url="http://mscrmblog.net/wp-content/uploads/2013/10/iframe-loading.png" />
</entry>
</feed>
当我尝试使用下面的代码使用c#Linq读取XML查询:
XElement _atom = XElement.Load(atom);
XNamespace nsMedia = "http://search.yahoo.com/mrss/";
XNamespace nsAtom = "http://www.w3.org/2005/Atom";
var temp = (from item in _atom.Descendants(nsAtom + "entry")
select new FinalListToBeDisplayed()
{
Title = item.Element(nsAtom + "title") == null ? "" : item.Element(nsAtom + "title").Value,
Description = item.Element(nsAtom + "summary") == null ? "" : item.Element(nsAtom + "summary").Value,
PublishedDate = item.Element(nsAtom + "published") == null ? "" : item.Element(nsAtom + "published").Value,
Link = item.Element(nsAtom + "link") == null ? "" : item.Element(nsAtom + "link").Attribute("href") == null ? "" : item.Element(nsAtom + "link").Attribute("href").Value,
Image = item.Element(nsMedia + "thumbnail") == null ? "" : item.Element(nsMedia + "thumbnail").Attribute(nsAtom + "url") != null ? item.Element(nsMedia + "thumbnail").Attribute(nsAtom + "url").Value : ""
}).ToList();
图像在任何时刻都没有捕获,即上面的代码无法读取缩略图。请帮我理解上面代码中的问题。
答案 0 :(得分:1)
试试这个
XElement _atom = XElement.Load(atom);
XNamespace nsMedia = "http://search.yahoo.com/mrss/";
XNamespace nsAtom = "http://www.w3.org/2005/Atom";
var temp = (from item in _atom.Descendants(nsAtom + "entry")
select new
{
Title = item.Element(nsAtom + "title") == null ? "" : item.Element(nsAtom + "title").Value,
Description = item.Element(nsAtom + "summary") == null ? "" : item.Element(nsAtom + "summary").Value,
PublishedDate = item.Element(nsAtom + "published") == null ? "" : item.Element(nsAtom + "published").Value,
Link = item.Element(nsAtom + "link") == null ? "" : item.Element(nsAtom + "link").Attribute("href") == null ? "" : item.Element(nsAtom + "link").Attribute("href").Value,
Image = item.Element(nsMedia + "thumbnail") == null ? "" : item.Element(nsMedia + "thumbnail").Attribute("url") != null ? item.Element(nsMedia + "thumbnail").Attribute("url").Value : ""
}).ToList();
答案 1 :(得分:0)
问题是url
的属性名称。 url
没有命名空间,但您将http://www.w3.org/2005/Atom
命名空间作为名称的一部分。删除它并使用url
它将起作用。
我还评论说,您可以使用返回序列的方法以及XElement
和XAttribute
中内置的显式转换来避免您的空检查。这实现了相同的结果,但更清洁:
Title = (string)item.Element(nsAtom + "title") ?? "",
Description = (string)item.Element(nsAtom + "summary") ?? "",
PublishedDate = (string)item.Element(nsAtom + "published") ?? "",
Link = (string)item.Elements(nsAtom + "link")
.Attributes("href")
.SingleOrDefault() ?? "",
Image = (string)item.Elements(nsMedia + "thumbnail")
.Attributes("url")
.SingleOrDefault() ?? ""