Używam Java DocumentBuilder.parse(InputStream)
do parsowania dokumentu XML. Czasami dostaję zniekształcone dokumenty XML, ponieważ po ostatnim >
pojawiają się dodatkowe śmieci, które powodują, że SAXException: Content is not allowed in trailing section
. (W przypadkach, które widziałem, śmieć to po prostu jeden lub więcej zerowych bajtów.)Ignorowanie "Treść nie jest dozwolona w sekcji końcowej" SAXException
Nie obchodzi mnie, co jest po ostatecznym >
. Czy istnieje łatwy sposób na przeanalizowanie całego dokumentu XML w Javie i czy nie ignoruje on żadnych śmieci?
Zauważ, że "ignoruj" nie oznacza po prostu uchwycenia i zignorowania wyjątku: mam na myśli zignorowanie ciągłego śmiecia, nie rzucającego wyjątku i zwrócenia obiektu Document
od czasu XML aż do końcowego >
jest prawidłowe.
Nie mam kontroli nad nadawcą. A twoja "odpowiedź" nie jest w duchu "Bądź liberalny w tym, co akceptujesz i surowo w tym, co emitujesz". –
Zapytałeś "czy istnieje łatwy sposób na przeanalizowanie całego dokumentu XML w Javie i zignorowanie wszelkich śmieci?" Odpowiedź brzmi "nie, nie ma" i podałem powód. Może szukasz http://home.ccil.org/~cowan/XML/tagsoup/? Może wiesz, że twój XML nie ma CDATA i możesz zaimplementować prymitywny wrapper inputStream? Nie jestem pewien, jakiej odpowiedzi szukasz. –
Każdy analizator składni XML śledzi każdy element i wie, kiedy wymieniony element został "zamknięty", parsując> jego zamykającego znacznika. Oznacza to, że każdy analizator składni XML zna także końcowe>, gdy widzi je, ponieważ pierwszy element został zbalansowany przez jego znacznik zamykający. W tym momencie chcę, żeby parser po prostu przestał. Sprawiasz, że jest to bardziej skomplikowane, niż jest. –