根据特定的XSD架构验证XML

本文关键字:验证 XML XSD | 更新日期: 2023-09-27 18:29:54

我有一个Web服务,它获取特定的XML,而该XML在文件本身中没有指定模式。我的项目中确实有XSD模式,它将用于针对它们测试获得的XML文件。

问题是,无论我做什么,验证器似乎都会接受文件,即使它们是无效的。

我使用的代码是这样的(为了更容易,省略了一些部分):

var schemaReader = XmlReader.Create(new StringReader(xmlSchemeInput));
var xmlSchema = XmlSchema.Read(schemaReader, ValidationHandler);
var xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.Schemas.Add(xmlSchema);
xmlReaderSettings.ValidationEventHandler += ValidationHandler;
xmlReaderSettings.ValidationType = ValidationType.Schema;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessIdentityConstraints;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
using(var xmlReader = XmlReader.Create(new StringReader(xmlInput), xmlReaderSettings))
{
    while (xmlReader.Read()) { }
}
// return if the xml is valid or not

我已经找到了几个具有内联指定模式的解决方案,它们工作得很好,但对于这样指定的模式(我认为应该工作),我似乎找不到任何解决方案。

我做错什么了吗?或者我只是错误地认为这就是它应该如何工作?

谢谢!

根据特定的XSD架构验证XML

尝试添加

xmlReaderSettings.Schemas.Compile()

之后

xmlReaderSettings.Schemas.Add(xmlSchema);

在那种情况下为我工作。