@Override public List<FeedItem> parse(InputStream input, int maxItems) throws RSSFeedParserException { List<FeedItem> result = new ArrayList<FeedItem>(); XmlPullParser parser = setupParser(input); FeedItemBuilder feedItemBuilder = null; String tagName; try { int currentEventType = parser.getEventType(); while (currentEventType != END_DOCUMENT && result.size() != maxItems) { tagName = parser.getName(); switch (currentEventType) { case START_TAG: if (ITEM_TAG.equalsIgnoreCase(tagName)) { feedItemBuilder = new FeedItemBuilder(); } else if (feedItemBuilder != null) { populateMessageProperty(parser.nextText(), feedItemBuilder, tagName); } break; case END_TAG: if (ITEM_TAG.equalsIgnoreCase(tagName)) { result.add(feedItemBuilder.getFeedItem()); feedItemBuilder = null; } break; default: break; } currentEventType = parser.next(); } } catch (XmlPullParserException e) { throw new RSSFeedParserException("RSS input stream has wrong content", e); } catch (IOException e) { throw new RSSFeedParserException("Something wrong with input stream", e); } return result; }
private void populateMessageProperty( String value, FeedItemBuilder feedItemBuilder, String tagName) { if (LINK_TAG.equalsIgnoreCase(tagName)) { feedItemBuilder.setLink(value); } else if (DESCRIPTION_TAG.equalsIgnoreCase(tagName)) { feedItemBuilder.setDescription(value); } else if (PUB_DATE_TAG.equalsIgnoreCase(tagName)) { feedItemBuilder.setDate(parseDate(value)); } else if (TITLE_TAG.equalsIgnoreCase(tagName)) { feedItemBuilder.setTitle(value); } }