Я уже некоторое время использую JAXB для анализа xml, который выглядит примерно так:
<report> <-- corresponds to a "wrapper" object that holds
some properties and two lists - a list of A's and list of B's
<some tags with> general <info/>
...
<A> <-- corresponds to an "A" object with some properties
<some tags with> info related to the <A> tag <bla/>
...
<A/>
<B> <-- corresponds to an "B" object with some properties
<some tags with> info related to the <B> tag <bla/>
...
</B>
</report>
Сторона, ответственная за сортировку xml, ужасна, но я не могу ее контролировать.
Она часто отправляет недопустимые символы xml и/или искаженный xml.
Я поговорил с ответственной стороной и исправил множество ошибок, но некоторые они просто не могут исправить.
Я хочу, чтобы мой синтаксический анализатор был максимально снисходителен к этим ошибкам, а когда это невозможно, чтобы получить как можно больше информации из XML-файла с ошибками.< br/> Итак, если xml содержит 100 A и у одного есть проблема, я все равно хотел бы сохранить остальные 99.
Вот мои самые распространенные проблемы:
1. Some info tag inner value contains invalid chars
<bla> invalid chars here, either control chars or just &>< </bla>
2. The root entity is missing a closing tag
<report> ..... stuff here .... NO </report> at the end!
3. An inner entity (A/B) is missing it's closing tag, or it's somehow malformed.
<A> ...stuff here... <somethingMalformed_blabla_A/>
OR
<A> ... Something malformed here...</A>
Я надеялся, что объяснил себя хорошо.
Я действительно хочу получить как можно больше информации из этих XML-файлов, даже если у них есть проблемы.
Думаю, мне нужно использовать некоторую стратегию, которая использует stax/sax вместе с JAXB, но я не знаю, как это сделать.
Если из 100 баллов A один A имеет проблему с xml, я не против выкинуть только этот A.
Хотя было бы намного лучше, если бы я мог получить A объект с таким объемом данных, который можно было проанализировать до возникновения ошибки.