2012年3月18日 星期日

Working with XML on Android

Reference : http://www.ibm.com/developerworks/opensource/library/x-android/

在IBM這篇XML的文章中,提供了很好的XML解譯方式

加上小小的修改,成為想要的流程



這樣就可以只要增修 Handler (extends from XmlHandler) 就可處理其他 Xml format
(Entity 好像也應該要變成 Interface or Abstract Object ??)


public interface FeedParser {
 List parse();
}

public abstract class BaseFeedParser implements FeedParser {

 private final URL feedUrl;

 protected BaseFeedParser(String feedUrl){
  try {
   this.feedUrl = new URL(feedUrl);
  } catch (MalformedURLException e) {
   throw new RuntimeException(e);
  }
 }

 protected InputStream getInputStream() {
  try {
      return feedUrl.openConnection().getInputStream();
  } catch (IOException e) {
      throw new RuntimeException(e);
  }
 }
}

public class SaxFeedParser extends BaseFeedParser {

 private XmlHandler handler;
 
 public SaxFeedParser(String feedUrl){
  super(feedUrl);
 }
 
 public List parse() {
     SAXParserFactory factory = SAXParserFactory.newInstance();
     try {
  SAXParser parser = factory.newSAXParser();
  parser.parse(this.getInputStream(), handler);
   
  return handler.getMessages();
  
     } catch (Exception e) {
  throw new RuntimeException(e);
     } 
 }

 public void setHandler(XmlHandler handler) {
  this.handler = handler;
 }
}

public abstract class XmlHandler extends DefaultHandler {

 public abstract List getMessages();
}