我有一个获取特定XML的Web服务,该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
我已经找到了一些使用内联指定模式的解决方案,这些解决方案效果很好,但是使用这样指定的模式(我认为应该可以工作),我似乎找不到任何解决方案。
难道我做错了什么?还是我以为这是应该做的只是错了?
谢谢!
最佳答案
尝试添加
xmlReaderSettings.Schemas.Compile()
后
xmlReaderSettings.Schemas.Add(xmlSchema);
在那种情况下为我工作。