根据特定的XSD架构验证XML

时间:2012-04-02 09:25:38

标签: c# xml xsd xml-validation

我有一个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

我发现了几个带有内联指定模式的解决方案,它们工作得很好,但是使用这样的模式(我认为应该可以工作)我似乎无法找到任何模式。

我做错了吗?或者我错误地认为它应该如何运作?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试添加

xmlReaderSettings.Schemas.Compile()

xmlReaderSettings.Schemas.Add(xmlSchema);
在那种情况下,

为我工作。