Игнорирование “Содержания не позволяется в запаздывающем разделе” SAXException

Я использую Java DocumentBuilder.parse(InputStream) проанализировать XML-документ. Иногда, я получаю уродливые XML-документы, в которых существует дополнительный спам после финала > это вызывает a SAXException: Content is not allowed in trailing section. (В случаях я видел, спам является просто одним или несколькими пустыми байтами.)

Я не забочусь о том, что после финала >. Существует ли простой способ проанализировать весь XML-документ в Java и иметь его, игнорируют какой-либо запаздывающий спам?

Обратите внимание, что "игнорируют", я просто не означаю ловить и игнорировать исключение: Я означаю игнорировать запаздывающий спам, не выдавать исключение и возвращаться Document объект начиная с XML до включения финала > допустимо.

7
задан Paul J. Lucas 11 May 2010 в 23:17
поделиться

2 ответа

Поскольку ваш отправитель представляет вам недопустимый XML, его необходимо исправить до того, как он попадет в синтаксический анализатор, если вы хотите избежать этого исключения. Если вы не можете исправить отправителя, вам понадобится какой-то этап предварительной обработки.

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

Если проблема сложнее, чем просто нулевые символы, вам, конечно, понадобится более сложный фильтр, что может оказаться трудным.

Если вы используете ContentHandler , вы можете добавить к нему обратный вызов, чтобы он мог сообщить вызывающему коду, когда конечный корневой тег был обработан, и на основе этих знаний вызывающий код может иметь логику в своем обработчике для исключения, чтобы просто игнорировать его, если конец был сигнализирован. В этот момент все, что должно было быть сделано синтаксическим анализатором, вероятно, все равно было сделано! Но это решение, похоже, не подходит для вашей ситуации.

8
ответ дан 7 December 2019 в 16:40
поделиться

Нет. Документ, содержащий завершающие символы, не является XML-документом. Исправьте отправителя.

-5
ответ дан 7 December 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: