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

根据C中的DTD验证XML时出现问题#

  •  1
  • craigmoliver  · 技术社区  · 15 年前

    这让我烦了好几天。我正在尝试将一个XML从上载的文件加载到一个xmldocument对象中,并获得以下死亡黄色屏幕:

    For security reasons DTD is prohibited in this XML document. To enable DTD processing set the ProhibitDtd property on XmlReaderSettings to false and pass the settings into XmlReader.Create method.
    

    这是我的密码。你可以清楚地看到我把禁止设置为错误。

    public static XmlDocument LoadXml(FileUpload fu)
    {
        var settings = new XmlReaderSettings
                           {
                               ProhibitDtd = false, 
                               ValidationType = ValidationType.DTD
                           };
        var sDtdPath = string.Format(@"{0}", HttpContext.Current.Server.MapPath("/includes/dtds/2.3/archivearticle.dtd"));
        settings.Schemas.Add(null, sDtdPath);
    
        var r = XmlReader.Create(new StreamReader(fu.PostedFile.InputStream), settings);
        var document = new XmlDocument();
        document.Load(r);
        return document;
    }
    
    1 回复  |  直到 13 年前
        1
  •  2
  •   Benjamin Autin Andrés Bonilla    13 年前

    添加 XmlResolver=null 给你的 XmlReaderSettings . 这将阻止XML文档尝试访问DTD。如果需要验证,请在单独的操作中进行验证。