Получить типы данных схемы из Xerces - PullRequest
2 голосов
/ 05 октября 2010

Я использую SAX2 в Xerces C ++ и хотел бы получать данные схемы XML, пока я обрабатываю элементы, чтобы я знал их тип, определенный в схеме. Как мне это сделать?

1 Ответ

1 голос
/ 11 октября 2010

Хорошо, я понял, как это сделать. Разреженная документация доступна по теме. По-видимому, мне нужно привести 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);
...