1

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

我希望有人可以帮助澄清这方面的任何方面。

谢谢,

标记

4

0 回答 0