throws IOException, CauseMemoryException, CauseException, Exception {
/** Initialize item collection */
Vector rssFeeds = new Vector();
/** Initialize XML parser and parse OPML XML */
XmlParser parser = new XmlParser(is);
try {
// The first element is the main tag.
int elementType = parser.parse();
// If we found the prologue, get the next entry.
if( elementType == XmlParser.PROLOGUE ) {
elementType = parser.parse();
}
if (elementType == XmlParser.END_DOCUMENT ) {
return null;
}
EncodingUtil encodingUtil = parser.getEncodingUtil();
do {
/** RSS item properties */
String title = "";
String link = "";
String tagName = parser.getName();
System.out.println("tagname: " + tagName);
if (tagName.equals("outline")) {
System.out.println("Parsing <outline> tag");
title = parser.getAttributeValue( "text" );
if (title != null) {
title = EncodingUtil.replaceAlphaEntities(true,
title);
// No need to convert from UTF-8 to Unicode using replace
// umlauts now because it is done with new String...,encoding.
// Replace numeric entities including ’, ‘
// “, and ”
title = EncodingUtil.replaceNumEntity(title);
// Replace special chars like left quote, etc.
// Since we have already converted to unicode, we want
// to replace with uni chars.
title = encodingUtil.replaceSpChars(title);
}
/**
* Create new RSS item and add it do RSS document's item
* collection. Account for wrong OPML which is an
* OPML composed of other OPML. These have url attribute
* instead of link attribute.
*/
if ((link = parser.getAttributeValue( "xmlUrl" )) == null) {
if (opmlDirectory) {
link = parser.getAttributeValue( "url" );
}
}
/** Debugging information */
System.out.println("Title: " + title);
System.out.println("Link: " + link);
if(( link == null ) || ( link.length() == 0 )) {
continue;
}
if (( m_feedNameFilter != null) &&
((title != null) &&
(title.toLowerCase().indexOf(m_feedNameFilter) < 0))) {
continue;
}
if (( m_feedURLFilter != null) &&
( link.toLowerCase().indexOf(m_feedURLFilter) < 0)) {
continue;
}
RssItunesFeed feed = new RssItunesFeed(title, link, "", "");
rssFeeds.addElement( feed );
}
}
while( parser.parse() != XmlParser.END_DOCUMENT );
} catch (CauseMemoryException ex) {
rssFeeds = null;
CauseMemoryException cex = new CauseMemoryException(
"Out of memory error while parsing OPML feed " +