问题
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