SAX парсер проблема - PullRequest
       21

SAX парсер проблема

1 голос
/ 22 декабря 2010

Я работаю над средством чтения RSS-каналов для определенного канала RSS, и у меня возникла проблема с SAX и тегом.Тег выглядит следующим образом:

<description>
<![CDATA[<img src=http://www.lamaruniversitypress.com/polopoly_fs/1.1832584!image/2678128836.jpg_gen/thumbnails/100x100/2678128836.jpg><br /><br><p>
    South Korea vowed Wednesday to completely punish North Korea if it attacks again.
...</p>]]>
</description>

В моем методе startElement этот элемент для обработки описания тега выглядит следующим образом:

if (localName.equals("description"))
        {            
            currentstate = RSS_DESCRIPTION;
            return;
        }

, а мой метод chars выглядит следующим образом:

case RSS_DESCRIPTION:
            _item.setDescription(theString);
            Log.i("DESCRIPTION","characters[" + theString + "]");
            currentstate = 0;
            break;

Файл журнала отображает это:

12-22 11:21:06.517: INFO/TITLE(489): characters[SKorea holds massive new drills after North attack]
12-22 11:21:06.527: INFO/DESCRIPTION(489): characters[
12-22 11:21:06.527: INFO/DESCRIPTION(489): ]

Это моя первая попытка работы с SAX, и я почти переписал все это с помощью другого парсера, спрашивая вас, ребята:мои последние попытки.

Я пытался обработать тег абзаца, который не работает, предположительно, потому что он находится внутри CDATA.Я попытался вставить подстановки описаний, подобных этому

String theString = new String(ch,start,length);
        /*
        if ( currentstate == RSS_DESCRIPTION){
            theString = new String(ch, theString.indexOf("<p>") + 3, theString.indexOf("</p>"));

        }

, и программа просто останавливается при попадании в нее.

Заранее спасибо за любую помощь !!!-Давид

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Не следует сбрасывать флаг currentState, так как анализатор SAX вызывает метод characters chunk-by-chunk.И когда первый блок сбрасывает флаг, последующие символы не будут обрабатываться таким же образом.

Вы можете добавить массивы символов к StringBuilder, а затем сбросить его на любой startElement, endElement,processingInstruction событие.

1 голос
/ 22 декабря 2010

Вы не объясняете, как устанавливается ch, поэтому немного сложно понять, что происходит. Вот мое обоснованное предположение:

Многие (если не все) парсеры SAX разбивают символьные данные на отдельные события, если в них появляются такие вещи, как ссылки на сущности или секции CDATA. Похоже, вы обрабатываете текст только из одного события. Вы хотите объединить их вместе.

...