1

多年来,我一直在使用 xmlDataReader 来读取 RSS,但突然之间,我使用的两个提要引入了一个额外的行,这会导致 xmlDataReader 解析器出错。

问题是这里的第二行与第一行冲突:

<link>http://www.eventjobsearch.co.uk/jobsrss/</link>
<atom:link href="http://www.eventjobsearch.co.uk/jobsrss/" rel="self" type="application/rss+xml"/>

解析器认为 atom:link 元素是 link 元素的副本。我个人并不需要 atom:link 行,但是当我使用流时,我看不到任何删除此行或删除冒号的方法(这将解决问题)。

我怎样才能摆脱流中的冒号,以便内置解析器再次工作?

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(WebConfigurationManager.AppSettings["XmlJobsFeedUrl"]);
 req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; 

 WebResponse response = req.GetResponse();
 Stream stream = response.GetResponseStream();
 XmlTextReader xmlTextReader = new XmlTextReader(stream);
 DataSet jobs = new DataSet("Jobs");
 jobs.ReadXml(xmlTextReader);
4

2 回答 2

1

请参阅此问题解决方案。直接在调用之前jobs.ReadXml(...),您可以阅读架构:

jobs.ReadXmlSchema("http://www.thearchitect.co.uk/schemas/rss-2_0.xsd");

可能建议将 xsd 文件复制到您自己的服务器。

于 2013-03-28T13:00:58.780 回答
1

我想你可能会这样做:

Stream stream = response.GetResponseStream();
Stream cleanStream = new Stream();

using (StreamWriter writer = new StreamWriter(cleanStream))
{
    using (StreamReader reader = new StreamReader(stream))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            // if the line doesn't match the problem then write it to the stream like this
            writer.WriteLine(line);
        }
    }
}

// and now use the cleanStream instead
XmlTextReader xmlTextReader = new XmlTextReader(cleanStream);

这应该可以让你清理你收到的流。

于 2013-03-28T13:04:51.670 回答