Как анализировать плохо сформированный XML в Java?
У меня есть XML, который мне нужно проанализировать, но не иметь никакого контроля над созданием. К сожалению, это не очень строгий XML и содержит такие вещи, как:
<mytag>This won't parse & contains an ampersand.</mytag>
В классах javax.xml.stream это совсем не нравится, и по правде говоря, ошибка:
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[149,50]
Message: The entity name must immediately follow the '&' in the entity reference.
Как я могу обойти это? Я не могу изменить XML, поэтому, я думаю, мне нужен терпимый к ошибкам парсер.
Мое предпочтение было бы для исправления, которое не требует слишком большого нарушения существующего кода парсера.
Ответы
Ответ 1
Если это недействительный XML (например, выше), то никакой парсер XML не будет обрабатывать его (как вы определили). Если вы знаете объем ошибок (например, вышеупомянутую проблему с сущностью), самым простым решением может быть запуск процесса исправления по нему (фиксация объектов, таких как вставка объектов), а затем передача его в существующий парсер.
В противном случае вам придется самостоятельно закодировать их со встроенной поддержкой таких аномалий. И я не могу поверить в это, кроме утомительной и подверженной ошибкам задачи.
Ответ 2
Используйте библиотеки, такие как tidy
или tagsoup
.
TagSoup, SAX-совместимый синтаксический анализатор, написанный на Java, который вместо синтаксического анализа корректного XML обрабатывает HTML, как он встречается в дикой природе: бедных, скверных и жестоких, хотя довольно часто далеки от коротких.
Ответ 3
Я считаю, что JSoup может обрабатывать плохо сформированный XML