我可以看到几个与有效 RSS 2.0 相关的问题和答案,但我没有看到我的问题的答案,抱歉,如果之前已经介绍过。
我正在尝试验证从用户提供的 URL 下载的 XML,以查看它们是否实际上是 RSS 2.0 文件。为此,我使用了 XmlReader 和 dotNet 中的其他东西。
我在采购完全验证标准 Wordpress 提要所需的所有模式时遇到问题,但我确实有一个来自 codeplex 的 RSS 2.0 XSD 和一个来自其他地方的 atom XSD,我还有一个用于一些基础知识的 XML XSD。
当我验证提要时,它验证成功,但我有一个警告,因为在架构中找不到 atom:link。
我可以在 atom 的模式中看到,正确的 atom 文件将只有 <feed> 或 <entry> 根元素。如果我添加适当的链接根元素,则此验证。
我的问题是,我需要哪些模式和设置才能让我的 RSS 验证器允许/识别/验证 atom:link 在 rss/channel 中?
对于 RSS,我使用的是http://rss2schema.codeplex.com/上的架构
对于 Atom,我使用的是http://www.kbcafe.com/rss/atom.xsd.xml上的架构
我的验证测试代码如下所示:
string xml="";
try
{
//Download the RSS File
//To Do: Verify against RSS schema
//var Client = System.Net.HttpWebRequest.Create("http://www.ia.uk.com/feed");
var Client = System.Net.HttpWebRequest.Create("C:\\Development\\euspen2013\\Website\\RabjohnMark-branch\\App_Data\\test.xml");
var r = Client.GetResponse();
var rs = r.GetResponseStream();
var valerrors = new List<string>();
var valwarnings = new List<string>();
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
settings.Schemas.Add(null, "C:\\Development\\euspen2013\\Website\\RabjohnMark-branch\\App_Data\\rss-2_0.xsd");
settings.Schemas.Add(null, "C:\\Development\\euspen2013\\Website\\RabjohnMark-branch\\App_Data\\dc-simple.xsd");
settings.Schemas.Add(null, "C:\\Development\\euspen2013\\Website\\RabjohnMark-branch\\App_Data\\xml.xsd");
settings.Schemas.Add(null, "C:\\Development\\euspen2013\\Website\\RabjohnMark-branch\\App_Data\\atom.xsd");
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.XmlResolver = new XmlUrlResolver();
settings.ValidationEventHandler += new ValidationEventHandler((s, a) => { if (a.Severity == XmlSeverityType.Error) valerrors.Add(a.Message); else valwarnings.Add(a.Message); });
var rr = XmlReader.Create(rs, settings);
var nsm = new XmlNamespaceManager(rr.NameTable);
var doc = new XmlDocument();
doc.Load(rr);
rr.Close();
rs.Close();
if (valerrors.Count() > 0) return; else xml = doc.OuterXml;
} catch (Exception e) {
return;
}
我希望有人可以帮助澄清这方面的任何方面。
谢谢,
标记