在channel元素中使用atom:link验证RSS 2.0

时间:2013-05-24 09:27:10

标签: xml validation rss atom-feed

我可以看到几个与有效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;
}

我希望有人可以帮助增加一些清晰度。

谢谢,

标记

0 个答案:

没有答案