Проверка XSD с использованием Saxon API - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь проверить Xsd Validation с помощью Saxon.Когда я добираюсь до фактической проверки, обнаруживается только первая ошибка, потому что validator.Run () генерирует исключение при получении первой ошибки и не продолжается впоследствии.Это явно не то, что вы хотите, когда у вас есть XML-файл с большим количеством ошибок.Есть ли способ продолжить проверку после создания исключения или существует другой метод проверки с использованием Saxon?

Этот код основан на одном примере для проверки, который Saxon имеет в своей папке с примерами документации, и этот раздел выполняет проверку.

1 Ответ

2 голосов
/ 26 октября 2011

Вот как я настроил Saxonica для возврата более одной ошибки:

proc.SetProperty(net.sf.saxon.lib.FeatureKeys.VALIDATION_WARNINGS,"true");

Рабочий код ниже:

static void Main(string[] args)
{
    try
    {
        errors = new ArrayList();
        Saxon.Api.Processor proc = new Processor(true);
        proc.SetProperty(net.sf.saxon.lib.FeatureKeys.VALIDATION_WARNINGS,"true");
        //this is the property to set!

        SchemaManager schemaManager = proc.SchemaManager;

        FileStream xsdFs = new FileStream(@"C:\path\to.xsd", FileMode.Open);

        schemaManager.Compile(XmlReader.Create(xsdFs));
        SchemaValidator schemaValidator = schemaManager.NewSchemaValidator();

        FileStream xmlFs = new FileStream(@"C:\path\to.xml", FileMode.Open);

        schemaValidator.SetSource(XmlReader.Create(xmlFs));
        schemaValidator.ErrorList = errors;
        schemaValidator.Run();
    }
    catch(net.sf.saxon.type.ValidationException e)
    {
        foreach(StaticError error in errors)
        {
            Console.WriteLine(error.ToString());
        }
        Console.ReadKey(true);
        Environment.Exit(0);

    }

    foreach (StaticError error in errors)
    {
        Console.WriteLine(error.ToString());
    }
    Console.ReadKey(true);
}

Подробнее о опции VALIDATION_WARNINGS можно узнать здесь .

...