Я работаю над устройством чтения 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>"));
}
и программа просто останавливается, когда она попадает в нее.
Заранее благодарим за помощь!!! -Давид
Вы не должны иметь флаг reset currentState
, так как парсер SAX вызывает метод characters
chunk-by-chunk. И когда первый фрагмент сбрасывает флаг, предстоящие символы не будут обрабатываться одинаково.
Вы можете добавить массивы char в StringBuilder
, а затем сбросить его на любые события startElement
, endElement
, processingInstruction
.
Вы не объясняете, как устанавливается ch
, поэтому немного сложно понять, что происходит. Вот моя образованная догадка, хотя:
Многие (если не все) анализаторы SAX будут разбивать символьные данные на отдельные события, если в них появляются такие вещи, как ссылки на объекты или разделы CDATA. Похоже, вы обрабатываете только текст из одного события. Вы хотите объединить их вместе.