2012-04-10 2 views
3

Я использую SAX парсер для разбора предварительно сформированный текст, как показано ниже:SAX Parser не читать после перевода строки

<content><![CDATA[(a) Definitions. 
    (i) term - Definition of term 
    (ii) term 2 - Definition of term 2 
    (iii) term 3 - Definition of term 3]]> 
</content> 

Мой обработчик

public void characters(char ch[], int start, int length){ 
    if (content) { 
     contentText = new String(ch, start, length)); 
    } 
}  

Однако я только получаю первую строку «(в) Определения. "В моем буфере символов. Другие строки не копируются. Как я могу получить доступ к недостающим строкам?

Thank you.

ответ

5

Согласно SAX parser specification, вы можете получать несколько обратных вызовов для characters, представляя куски одного и того же символьного блока. Вы должны объединить последовательные в одну строку.

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

1

Нет гарантий, что characters() будет называться полным текстом. Вам нужно сопоставить результаты каждого вызова и проверить строку после обработки конечного элемента.

+0

Так что я должен использовать строковый буфер для чтения символов до его завершения. Спасибо – Daniel