Проверка XML по конкретной схеме XSD - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть веб-сервис, который получает определенный 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 голосов
/ 02 апреля 2012

Попробуйте добавить

xmlReaderSettings.Schemas.Compile()

после

xmlReaderSettings.Schemas.Add(xmlSchema);

работал для меня в этой ситуации.

...