XML Reader wants ProhibitDTD to be false but it is!

ε祈祈猫儿з 提交于 2020-01-14 03:47:10

问题


Here is the code Stream stream = request.InputStream;

String xsd = // Path to file

XmlReaderSettings settings = new XmlReaderSettings();
if (xsd.Length != 0 && File.Exists(xsd))
{
    settings.ProhibitDtd = false;
    settings.Schemas.Add("", xsd);
    settings.ValidationType = ValidationType.Schema;

}
else
{
    throw new cXMLException("XSD file not found", ResponseStatus.InternalServerError);
}

using (XmlReader reader = XmlReader.Create(stream, settings))
{
    XmlDocument doc = new XmlDocument();

    // Attempt to validate the XML document
    try
    {
        doc.Load(reader);
    }
    catch (XmlSchemaValidationException e)
    {
        StringBuilder sb = new StringBuilder("Invalid cXML document. Reason: ");
        sb.Append(e.Message);
        String message = sb.ToString();
        throw new cXMLException(message, ResponseStatus.BadRequest);
    }

    return new cXMLBasicResponse("Everything OK", ResponseStatus.OK);
}

For some reason it keeps asking me to set "ProhibitDtd" to be false. But as you can see I already have! Below is the exception

System.Xml.XmlException: 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.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.Schema.Parser.StartParsing(XmlReader reader, String targetNamespace)
   at System.Xml.Schema.Parser.Parse(XmlReader reader, String targetNamespace)
   at System.Xml.Schema.XmlSchemaSet.ParseSchema(String targetNamespace, XmlReader reader)
   at System.Xml.Schema.XmlSchemaSet.Add(String targetNamespace, String schemaUri)
   at cXML.ResponseFactory.requestReader(HttpRequest request)

Any thoughts would be greatly appreciated.


回答1:


I made a mistake, I was passing it a DTD (not an XSD) and confusing the whole thing.



来源:https://stackoverflow.com/questions/1783189/xml-reader-wants-prohibitdtd-to-be-false-but-it-is

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!