Хорошо, я понял, как это сделать. Разреженная документация доступна по теме. По-видимому, мне нужно привести SAX2XMLReader, который возвращает XMLReaderFactory :: createXMLReader (), к SAX2XMLReaderImpl. Затем я могу зарегистрировать реализацию PSVIHandler на этом интерфейсе. Я должен предоставить свою собственную реализацию PSVIHandler, поскольку я не смог найти реализацию по умолчанию в Xerces.
Как только эта реализация PSVI зарегистрирована в SAX2XMLReaderImpl, я затем создаю impH ContentHandler и передаю impl обработчика PSVI его конструктору. Затем я регистрирую ContentHandler с помощью SAX2XMLReaderImpl. Затем при анализе я могу получить доступ к информации из PSVIHandler, чтобы получить информацию, связанную со схемой.
Все это кажется очень неуклюжим, а интерфейс PSVIHandler выглядит очень недружелюбно. Может быть, есть лучший способ.
Вот фрагмент кода:
SAX2XMLReaderImpl* parser = dynamic_cast<SAX2XMLReaderImpl*>(XMLReaderFactory::createXMLReader());
PSVIHandler* pSchemaHandler = new MyPSVIHandler();
DefaultHandler* defaultHandler = new MyXMLHandler(pSchemaHandler);
parser->setContentHandler(defaultHandler);
parser->setErrorHandler(defaultHandler);
parser->setPSVIHandler(pSchemaHandler);