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

1

Я работаю над устройством чтения 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>"));

        }

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

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

  • 0
    Код подстроки, который я только что вставил, не соответствует тому, что я на самом деле запустил, я фактически создал новую строку thisString и передал ей theString вместо ch ...
  • 0
    Я не думаю, что верю свалке Log Cat. Действительно ли анализатор изменил «Южная Корея ...» на «SKorea ...» или есть что-то еще с XML?
Показать ещё 4 комментария
Теги:
rss
sax

2 ответа

2

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

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

1

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

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

  • 0
    публичные пустые символы (char ch [], int start, int length)
  • 0
    извините, ch это массив символов, передаваемый публичным пустым символам.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню