2013-02-11 7 views
-3

Я использую SAX Parser в android. Я должен был изменить EventHandler так:случайный ?! parsing error

else if(xGrowerNotes){ 
       profile.setGrowerNotes(profile.getGrowerNotes()+chars); 
       //random bug 
      } 

У меня есть версия файла XML на 4 языках, UTF-8 закодирован. Я называю синтаксический анализатор с

is.setEncoding("UTF-8"); 

3 языка хорошо работают, однако испанский один беспокоит меня. Начинается, как и без атрактарных растений. Regul ... и событие вызвано 2 раза. Смысл без изменения, он бы отрезал первую часть и установил только «ar las plantas. Regul ...» в качестве текста. Если я добавлю «тест 1 2 3» перед строкой, отрезок перемещается, а это значит, что первые 13 шестеренок вырезаны. Это только в испанской версии, и все документы имеют одинаковую кодировку. Добавление «test 1 2 3» в конец текста расширяет вторую строку.

Может ли это прояснить это? Заранее спасибо!

+0

Мы сможем лучше объяснить, добавляете ли вы еще немного кода вашего обработчика событий. –

ответ

0

От documentation:

Парсер будет вызывать этот метод, чтобы сообщить каждый фрагмент данных символов. Анализаторы SAX могут возвращать все непрерывные символьные данные в одном блоке, или они могут разбить его на несколько кусков; однако все символы в любом отдельном событии должны поступать от одного и того же внешнего объекта, чтобы локатор предоставлял полезную информацию.

Это означает, что вы не должны допускать, чтобы получить все данные символа за один вызов. Все фрагменты, о которых сообщается, возможно, должны быть добавлены к нескольким вызовам, чтобы получить полные данные.

+0

хорошо знаю, что, например, & разделит строку на 3 части, однако испанский текст выглядит как обычный текст для меня, и я не могу понять, почему синтаксический анализатор разделяет строку после x chars – user1497119

+0

Это потому, что буфер, используемый синтаксический анализатор завершился посередине текста. Контракт позволяет парсеру даже доставлять каждый символ отдельно (что, конечно же, будет сумасшедшим), вы должны правильно это обработать. – Henry

+0

, так что это означает, что я должен также проверить все числа? что может случиться так, что число 2.345123 возвращает мне 2 строки 2.34 и 5123, например ..? – user1497119