Как получить объявление типа документа в Xerces-C при использовании SAX2?

Я использую SAX2 от Xerces-C для чтения XML-документа. Тем не менее, я хотел бы проверить объявление Doctype (если оно есть), чтобы убедиться, что файл XML находится в том формате, который я ожидаю.

Я попробовал методы unparsedEntityDecl и notationDecl из DTDHandler, и EntityResolver кажется более низкоуровневым, чем то, что я ищу.

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


person Sled    schedule 12.05.2010    source источник


Ответы (1)


Посмотрите на LexicalHandler — startDTD предоставит вам Doctype. Однако это не подтверждает, что документ действительно соответствует этому типу документа. Вам необходимо включить проверку в ридере с помощью setFeature сделать это. (Я использовал только Java Xerces, но из документации похоже, что методы в основном одинаковы.)

person Steven D. Majewski    schedule 12.05.2010
comment
Спасибо! Это сработало, как только я вспомнил/осознал, что зарегистрировал свой обработчик с помощью метода SAX2XMLReader::setLexicalHandler(), а также просто реализовал его. - person Sled; 19.05.2010