我可以看到几个与有效的RSS 2.0有关的问题和答案,但我没有看到我的问题的答案,对不起,如果以前已经涵盖过 .

我正在尝试验证从用户提供的URL下载的XML,看看它们是否实际上是RSS 2.0文件 . 要做到这一点,我正在使用XmlReader和dotNet的其他东西 .

我在寻找完全验证标准Wordpress提要所需的所有模式时遇到问题,但我确实有来自codeplex的RSS 2.0 XSD和来自其他地方的原子XSD,我还有一些XML XSD用于一些基础知识 .

当我验证feed时,它验证成功,但我有一个警告,因为在架构中找不到atom:link .

我可以在原理模式中看到一个正确的原子文件只有<feed>或<entry>根元素 . 如果我添加适当的链接根元素,则验证 .

我的问题是,我需要什么模式和设置才能让我的RSS验证器允许/识别/验证原子: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;
}

我希望有人可以帮助为这方面的任何方面增加一些清晰度 .

谢谢,

标记