验证XML代码时出现意外异常

时间:2010-11-02 15:23:00

标签: c# .net html xml

在.NET / C#中,我想验证一些HTML代码。例如,我有以下HTML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head><title></title></head>
  <body>
   CDATA section number 1?
  </body>
</html>

我有以下C#代码:

string htmlCode = ... // for instance the html above
var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD };
settings.ValidationEventHandler += delegate(object s, ValidationEventArgs e)
{
    throw new XmlException(e.Message);
};
using (var srdr = new StringReader(htmlCode))
using (var xrdr = new XmlTextReader(srdr))
using (var vrdr = XmlReader.Create(xrdr, settings))
{
    try
    {
        while (vrdr.Read()) { }
    }
    catch (XmlException ex)
    {
        // do some stuff
    }
}

当我运行此代码时,我有这个例外:

  

System.Net.WebException:远程服务器返回错误:(403)禁止   在System.Net.HttpWebRequest.GetResponse()

我做了什么错了?在此先感谢您的帮助

3 个答案:

答案 0 :(得分:2)

这不是你的代码。

http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic

您需要自己提供DTD,例如使用从本地资源返回DTD的自定义XmlResolver

答案 1 :(得分:1)

看起来您的代码正在尝试从中下载 http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

返回403(尝试在浏览器中打开它)

注意:Lucero的链接解释为为什么它返回403

答案 2 :(得分:0)

您获得的响应代码是一个HTTP代码,表明您禁止访问您尝试检索的资源。这可能有很多原因:

  1. 服务器设置 - 服务器可能禁止所有访问资源的尝试。要检查此情况,请尝试从浏览器访问它。如果您在浏览器中遇到相同的错误,则可能是您的问题是服务器配置。

  2. 已阻止的用户代理 - 有时只允许某些用户代理访问资源。这样做是为了防止自动网站抓取工具抓取资源中的信息。如果您访问的网站包含robots.txt文件,则可能会阻止您的程序。

  3. 需要身份验证 - 如果您要访问的服务器需要身份验证(例如基本身份验证或摘要身份验证),那么您需要提供凭据以及您的请求。同样,这可以通过浏览器进行检查。如果资源需要身份验证,则应在浏览器中弹出一个请求用户/密码信息的弹出窗口。

  4. 你可能有其他原因可以得到这个代码,但这些是我能想到的前三个。