проверить XML-файл с помощью xsd в C # .. Сколько это на самом деле проверить? - PullRequest
0 голосов
/ 23 марта 2012

Пытался создать валидатор для моих XML-файлов. Я использовал некоторые другие примеры, которые можно найти на этом сайте (например, Как проверить документ XML? ).

Я просто не вижу, чтобы это работало так, как я ожидаю. Что на самом деле подтверждается?

Почти независимо от того, что я изменяю в XML-файле, проверка валидатора видит это как ошибку. Я думал, что валидатор увидит, содержит ли файл xml элемент, не определенный в xsd. Валидатор только перехватывает нормальные синтаксические ошибки XML.

Так какой смысл использовать xsd, если он не имеет влияния?

Мой валидатор

string xsd_file = "Message.xsd";
XmlSchema xsd = new XmlSchema();
xsd.SourceUri = xsd_file;

XmlSchemaSet ss = new XmlSchemaSet();
ss.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
ss.Add(null, xsd_file);
if (ss.Count > 0)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas.Add(ss);
    settings.Schemas.Compile();
    settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
    XmlTextReader r = new XmlTextReader(filepath);
    using (XmlReader reader = XmlReader.Create(r, settings))
    {
        try
        {
            while (reader.Read())
            {
            }
        }
        catch (XmlException ex)
        {

            throw;
        }                        
    }
}

1 Ответ

0 голосов
/ 23 марта 2012

Код для обработчика события проверки отсутствует.

Глядя на мой рабочий код, который немного отличается, у меня есть

settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | XmlSchemaValidationFlags.ReportValidationFlags;

Не могу вспомнить, почему я должен был добавить его.

Первое, что нужно сделать, это убедиться, что обработчик событий запускается, после этого может возникнуть проблема с вашим xsd.

...