C# 为什么我不能从这个xml文件中获取数据?
我试图从这个xml文件中获取一些元素值,但我似乎无法填充我的项目 我的代码如下所示:C# 为什么我不能从这个xml文件中获取数据?,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我试图从这个xml文件中获取一些元素值,但我似乎无法填充我的项目 我的代码如下所示: var url = "http://rss.yomiuri.co.jp/f/yolranking30"; XNamespace dcM = "http://purl.org/dc/elements/1.1"; var xdoc = XDocument.Load(url); var items = xdoc.Descendants("item")
var url = "http://rss.yomiuri.co.jp/f/yolranking30";
XNamespace dcM = "http://purl.org/dc/elements/1.1";
var xdoc = XDocument.Load(url);
var items = xdoc.Descendants("item")
.Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("date").Value
})
.ToList();
var items = xdoc.Descendants(dcM + "item").Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("date").Value
})
.ToList();
这就是xml文件的外观:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="../../../../../css/rss/feedRss1.xsl" media="screen" type="text/xsl"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<channel rdf:about="http://app2.yomiuri.co.jp/xml/">
<title>YOMIURI ONLINE</title>
<link>http://www.yomiuri.co.jp/?from=ranking</link>
<description>YOMIURI ONLINE</description>
<items>
<rdf:Seq>
</rdf:Seq>
</items>
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="self" href="http://rss.yomiuri.co.jp/rss/yol/ranking30" type="application/rss+xml" />
</channel>
<item rdf:about="http://www.yomiuri.co.jp/world/news/20130626-OYT1T01757.htm?from=ranking&n=2013-06-27T01:50:16+09:00">
<title>同性婚に不利な法律は違憲…米連邦最高裁が判決</title>
<link>http://rss.rssad.jp/rss/artclk/rU.u5eAeiqIJ/1a997622b1ba6856fd5076908f7bd2f8?ul=glu4bJ7PJLVo4zXmLVKeaWZer255i3agVSmYkXXqyYziAceL01oXmlaDAPhmM2lVMmWxdIZHj9Rl.BCqdtrrrl8Ms_npUC8xmiv6fMwMrW1schwZC</link>
<dc:subject>国際</dc:subject>
<dc:date>2013-06-27T01:50:16+09:00</dc:date>
<description><![CDATA[<p><img border="0" width="1" height="1" src="http://rss.rssad.jp/rss/artimg/rU.u5eAeiqIJ/1a997622b1ba6856fd5076908f7bd2f8"/></p>]]></description>
</item>
<item rdf:about="http://www.yomiuri.co.jp/world/news/20130626-OYT1T01205.htm?from=ranking&n=2013-06-27T00:25:21+09:00">
<title>新疆ウイグル自治区で警察など襲撃、27人死亡</title>
<link>http://rss.rssad.jp/rss/artclk/rU.u5eAeiqIJ/4cc414b33f7e276d08a3b17388567cb9?ul=hGxozUCqWTHRxCERXg6mAg51c1EJeOT1QhnzUajt0vK9dXjQzMCnYuenvoFoFRHX0ORDlQ3HRycE1drU.20cRgB3s.__I7QxBWTMdbI4cpBxMQN93</link>
<dc:subject>国際</dc:subject>
<dc:date>2013-06-27T00:25:21+09:00</dc:date>
<description><![CDATA[<p><img border="0" width="1" height="1" src="http://rss.rssad.jp/rss/artimg/rU.u5eAeiqIJ/4cc414b33f7e276d08a3b17388567cb9"/></p>]]></description>
</item>
</rdf:RDF>
读卖在线
http://www.yomiuri.co.jp/?from=ranking
读卖在线
同性婚に不利な法律は違憲…米連邦最高裁が判決
http://rss.rssad.jp/rss/artclk/rU.u5eAeiqIJ/1a997622b1ba6856fd5076908f7bd2f8?ul=glu4bJ7PJLVo4zXmLVKeaWZer255i3agVSmYkXXqyYziAceL01oXmlaDAPhmM2lVMmWxdIZHj9Rl.BCqdtrrrl8Ms_npUC8xmiv6fMwMrW1schwZC
国際
2013-06-27T01:50:16+09:00
]>
新疆ウイグル自治区で警察など襲撃、27人死亡
http://rss.rssad.jp/rss/artclk/rU.u5eAeiqIJ/4cc414b33f7e276d08a3b17388567cb9?ul=hGxozUCqWTHRxCERXg6mAg51c1EJeOT1QhnzUajt0vK9dXjQzMCnYuenvoFoFRHX0ORDlQ3HRycE1drU.20cRgB3s.__I7QxBWTMdbI4cpBxMQN93
国際
2013-06-27T00:25:21+09:00
]>
我是不是做错了什么,也许是因为rdf
感谢您的任何帮助 这可能是名称空间问题。您正在创建一个
XNamespace
对象,但没有使用它。尝试使用如下名称空间获取项:
var url = "http://rss.yomiuri.co.jp/f/yolranking30";
XNamespace dcM = "http://purl.org/dc/elements/1.1";
var xdoc = XDocument.Load(url);
var items = xdoc.Descendants("item")
.Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("date").Value
})
.ToList();
var items = xdoc.Descendants(dcM + "item").Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("date").Value
})
.ToList();
只有
元素位于dc
命名空间中。文档的默认命名空间为
xmlns="http://purl.org/rss/1.0/"
此外,在选择ns+node\u local\u name形式的节点时,还应使用名称空间
XNamespace ns = "http://purl.org/rss/1.0/";
XNamespace dc = "http://purl.org/dc/elements/1.1/";
var items = from item in xdoc.Descendants(ns + "item")
select new {
Title = (string)item.Element(ns + "title"),
Description = (string)item.Element(ns + "description"),
Link = (string)item.Element(ns + "link"),
PubDate = (string)item.Element(dc + "date") // date in dc
};
最后一个技巧是将元素强制转换为字符串,而不是访问它的值
属性。这可以避免在文档中找不到元素时出现异常。请解释非主题元素:)@Rohander刚刚验证,它解析您的xml