代码之家  ›  专栏  ›  技术社区  ›  pierroz

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

  •  0
  • pierroz  · 技术社区  · 15 年前

    在.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.HttpWebRequest.GetResponse()

    3 回复  |  直到 15 年前
        1
  •  2
  •   Lucero    15 年前

    这不是你的密码。

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

    您需要自己提供DTD,例如使用 XmlResolver

        2
  •  1
  •   M-Peror    15 年前

    看起来你的代码正试图从 http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

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

    为什么?

        3
  •  0
  •   Brian Driscoll    15 年前

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

    1. 阻止的用户代理-有时只允许某些用户代理访问资源。这样做是为了防止自动网站爬虫程序在资源中抓取信息。如果您访问的站点有robots.txt文件,则有可能您的程序被阻止。

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