我有XmlReader的奇怪行为。当使用它来验证Xml对抗Xsd时,everythink工作正常,我的期望。但是当我尝试针对另一个Xsd验证Xsd文件时,它不会抛出任何验证异常。
为了更好地阐述我的用例:我有一个应用程序,用户可以上传像数据输入的Xml文件。用户必须为已上载的xml文件上载xsd文件,然后根据已上载的Xsd文件验证Xml文件。但是当用户上传新的Xsd文件作为Xml文件(Xsd是有效的Xml),然后上传另一个Xsd文件以验证第一个Xsd文件时,我需要通知验证消息,即Xml文件(在本例中是第一个Xms文件)对上传的Xsd文件(第二个Xsd文件)无效。
这是我自己的"包装"实现XmlReader:
public static class XmlReader
{
public static XmlDocument GetSchemaDocument(Stream stream)
{
var schemaDocument = new XmlDocument();
var schemaDocumentReader = new XmlTextReader(stream);
schemaDocument.Load(schemaDocumentReader);
return schemaDocument;
}
public static XmlReaderSettings GetXmlReaderSettings(Stream stream)
{
var schemaSet = new XmlSchemaSet();
var schemaSetReader = new XmlTextReader(stream);
schemaSet.Add("", schemaSetReader);
var settings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
Schemas = schemaSet,
};
settings.ValidationEventHandler += ValidationEventHandler;
return settings;
}
public static XmlDocument GetXmlDocument(Stream stream, XmlReaderSettings settings)
{
var reader = System.Xml.XmlReader.Create(stream, settings);
var document = new XmlDocument();
document.Load(reader);
return document;
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
if(e.Severity == XmlSeverityType.Error)
throw new ValidationException("Xml does not valid with Xsd.");
}
}
我的问题是为什么XmlReader将任何Xsd文件验证为另一个Xsd文件是否有效?
答案 0 :(得分:2)
帕维尔写道。
解决方案是使用XmlSchemaValidationFlags.ReportValidationWarnings。