Я использую Java DocumentBuilder.parse(InputStream)
проанализировать XML-документ. Иногда, я получаю уродливые XML-документы, в которых существует дополнительный спам после финала >
это вызывает a SAXException: Content is not allowed in trailing section
. (В случаях я видел, спам является просто одним или несколькими пустыми байтами.)
Я не забочусь о том, что после финала >
. Существует ли простой способ проанализировать весь XML-документ в Java и иметь его, игнорируют какой-либо запаздывающий спам?
Обратите внимание, что "игнорируют", я просто не означаю ловить и игнорировать исключение: Я означаю игнорировать запаздывающий спам, не выдавать исключение и возвращаться Document
объект начиная с XML до включения финала >
допустимо.
Поскольку ваш отправитель представляет вам недопустимый XML, его необходимо исправить до того, как он попадет в синтаксический анализатор, если вы хотите избежать этого исключения. Если вы не можете исправить отправителя, вам понадобится какой-то этап предварительной обработки.
Если ситуация такова, что у вас есть лишние нулевые байты после закрывающего тега, как указано в одном из ваших ответов на другой ответ, это может быть то, что вы можете легко решить, заключив свой входной поток в FilterInputStream
, который вы реализуете для пропуска нулевых байтов.
Если проблема сложнее, чем просто нулевые символы, вам, конечно, понадобится более сложный фильтр, что может оказаться трудным.
Если вы используете ContentHandler
, вы можете добавить к нему обратный вызов, чтобы он мог сообщить вызывающему коду, когда конечный корневой тег был обработан, и на основе этих знаний вызывающий код может иметь логику в своем обработчике для исключения, чтобы просто игнорировать его, если конец был сигнализирован.
В этот момент все, что должно было быть сделано синтаксическим анализатором, вероятно, все равно было сделано! Но это решение, похоже, не подходит для вашей ситуации.
Нет. Документ, содержащий завершающие символы, не является XML-документом. Исправьте отправителя.