我有一个例外
var stream = e.Result;
var response = XmlReader.Create(stream);
var feeds = SyndicationFeed.Load(response); // IT IS HERE
例外
找不到名称空间名称为''的元素'频道'。 8号线, 位置2。
RSS看起来像:
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<atom:link href="http://dallas.example.com/rss.xml" rel="self"
type="application/rss+xml" /> <channel> <title>News</title>
<link>http://www.samsung.com/us</link> <description>News</description>
...
http://validator.w3.org/feed/说“这是一个有效的RSS Feed。” (你可以在这里查看http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fwww.samsung.com%2Fus%2Ffunction%2Frss%2FrssFeedItemList.do%3FctgryCd%3D101%26typeCd%3DNEWS)
所以我不知道发生了什么...... :(
我们可以解决方法来取消SyndicationFeed class的某些验证消息吗?
感谢您提供任何解决方案,让我有机会忘记此异常!
答案 0 :(得分:3)
如果您查看列出的W3验证结果,则会显示:
line 8, column 0: Undocumented use of atom:link
放置在atom:link
元素之前的channel
元素导致SyndicationFeed
类在加载时失败。您可以通过在本地下载rss feed xml,删除/评论atom:link
行并再次运行代码来自行测试。如果没有该行,则会加载xml并找到提要。这个happened before有SyndicationFeed
类。
答案 1 :(得分:1)
由于Michael’s answer,我能够预处理有问题的XML(不受我控制)以移动错误的atom:link
元素:
private static readonly XName AtomLink = XName.Get( "link", "http://www.w3.org/2005/Atom" );
private static readonly XName Channel = XName.Get( "channel" );
...
var document = XDocument.Load( stream );
var channel = document.Root.Element( Channel );
foreach( var misplacedLink in document.Root.Elements( AtomLink ) ) {
misplacedLink.Remove( );
channel.Add( misplacedLink );
}
using( var reader = document.CreateReader( ) )
return SyndicationFeed.Load( reader );