первый раз. Обновленный ответ с чем-то, что может помочь другим. Я надеюсь, что это не слишком специфично для моей конкретной проблемы. Я разбираю созданный мной RSS-канал с очень длинным описанием, но другие интересующие вас теги, т. Е. Заголовок, дата и URL канала, всегда короткие. Описание содержит информацию о социальных событиях. В описании я использую теги, которые позже анализирую, чтобы дать мне информацию о событии, такую как дата события (отличается от RSS pubDate), (Location), (ticketDetails), (Phone) и т. Д.
Хороший способ справиться с этим - небольшая модификация ответа в этом посте. Я добавил теги в описание для (Event) и (EndEvent), и я продолжаю добавлять к своему String Builder, пока не получу «(EndEvent)». Таким образом, я знаю, что у меня есть полная строка. Это может не сработать в вашей ситуации, если вы не контролируете ленту новостей, если не знаете, что в конце описания RSS всегда есть определенная строка.
Публикация на случай, если это (кашель, взлом) кому-нибудь поможет. Код выглядит следующим образом:
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
strBuilder = new StringBuilder();
if ("item".equals(qName)) {
currentItem = new RssItem();
} else if ("title".equals(qName)) {
parsingTitle = true;
} else if ("link".equals(qName)) {
parsingLink = true;
}
else if ("pubDate".equals(qName)) {
parsingDate = true;
}
else if ("description".equals(qName)) {
strBuilder = new StringBuilder(); //reset the strBuilder variable to null
parsingDescription = true;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
String descriptionTester = strBuilder.toString();
if ("item".equals(qName)) {
rssItems.add(currentItem);
currentItem = null;
} else if ("title".equals(qName)) {
parsingTitle = false;
} else if ("link".equals(qName)) {
parsingLink = false;
}
else if ("pubDate".equals(qName)) {
parsingDate = false;
}
//else
// currentItem.setDescription(descriptionTester);
else if ("description".equals(qName) && descriptionTester.contains("(EndEvent)")) {
parsingDescription = false;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (strBuilder != null) {
for (int i=start; i<start+length; i++) {
strBuilder.append(ch[i]);
}
}
if (parsingTitle) {
if (currentItem != null)
currentItem.setTitle(new String(ch, start, length));
parsingTitle = false;
}
else if (parsingLink) {
if (currentItem != null) {
currentItem.setLink(new String(ch, start, length));
parsingLink = false;
}
}
else if (parsingDate) {
if (currentItem != null) {
currentItem.setDate(new String(ch, start, length));
parsingDate = false;
}
}
else if (parsingDescription) {
if (currentItem != null && strBuilder.toString().contains("(EndEvent)" )) {
String descriptionTester = strBuilder.toString();
currentItem.setDescription(descriptionTester);
parsingDescription = false;
}
}
}
Как я уже сказал, надеюсь, что это поможет кому-то, потому что я на какое-то время оказался в тупике!