У меня есть контакт, который испытывает проблему с SAX при парсинге файлов Atom и RSS. По его словам, это - как будто текст, прибывающий из элементов Объекта, является усеченным в апострофе или иногда символе с диакритикой. Кажется, существует проблема с кодированием также.
Я дал SAX попытку, и я имею некоторое усечение, происходящее также, но не смог вырыть далее. Я ценил бы некоторые предложения, если кто-то там занялся этим прежде.
Это - код, это используется в ContentHandler:
public void characters( char[], int start, int end ) throws SAXException {
//
link = new String(ch, start, end);
Править: Проблема кодирования могла бы произойти из-за того, чтобы хранить информацию в массиве байтов, поскольку я знаю работы Java в Unicode.
. Не гарантируется, что метод characters () предоставит вам полное символьное содержимое текстового элемента за один проход - полный текст может занимать буфер границы. Вам необходимо самостоятельно буферизовать символы между событиями начального и конечного элемента.
например
StringBuilder builder;
public void startElement(String uri, String localName, String qName, Attributes atts) {
builder = new StringBuilder();
}
public void characters(char[] ch, int start, int length) {
builder.append(ch,start,length);
}
public void endElement(String uri, String localName, String qName) {
String theFullText = builder.toString();
}
Как вы передаете ввод в SAX? Как InputStream (рекомендуется) или Reader? Итак, начиная с вашего байта [], попробуйте использовать ByteArrayInputStream .
Сущности XML генерируют специальные события в SAX. Вы можете поймать их с помощью LexicalHandler , хотя обычно в этом нет необходимости. Но это объясняет , почему нельзя предположить, что вы получите только одно символов событие на тег. Используйте буфер, как описано в других ответах.
Например, hello & amp; world
сгенерирует последовательность
Если вам нужны другие примеры, посмотрите Вспомогательный интерфейс SAX . Другие особые события - внешние сущности, комментарии, CDATA и т. Д.