Вчера потратил кучу времени, чтобы сделать валидацию XML по XSD. Внятной информации нету (или не осилил нарыть), кроме
этого примера, но он почему-то не работал. Точнее, работал, но не ругался на открывающий и закрывающий тег, не указанный в схеме
В общем, почти все в указанном выше примере для меня было гуд, но пришлось изменить пару методов для парсера:
оригинал:
domParser.setErrorHandler(&parserErrorHandler);
domParser.setValidationScheme(XercesDOMParser::Val_Auto);
domParser.setDoNamespaces(true);
domParser.setDoSchema(true);
domParser.setValidationConstraintFatal(true);
то, что получилось у меня:
parser.setDoNamespaces(true);
parser.setDoSchema(true);
parser.setExternalNoNamespaceSchemaLocation(schema_file.c_str());
parser.setErrorHandler(&parserErrorHandler);
parser.setDoValidation(true);
parser.setValidationScheme(XercesDOMParser::Val_Auto);
parser.setValidationSchemaFullChecking(true);
Ключевым моментов для меня была опция parser.setValidationSchemaFullChecking(true), которую я нашел тупо просмотрев методы класса )...
Возможно, еще пригодится когда-нибудь.