MyHandler.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:4k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex08_13; 
  2. /* import相关class */
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.xml.sax.Attributes; 
  6. import org.xml.sax.SAXException; 
  7. import org.xml.sax.helpers.DefaultHandler; 
  8. public class MyHandler extends DefaultHandler
  9. {
  10.   /* 变量声明 */
  11.   private boolean in_item = false;
  12.   private boolean in_title = false;
  13.   private boolean in_link = false;
  14.   private boolean in_desc = false;
  15.   private boolean in_date = false;
  16.   private boolean in_mainTitle = false;
  17.   private List<News> li;
  18.   private News news;
  19.   private String title="";
  20.   private StringBuffer buf=new StringBuffer();
  21.   /* 将转换成List<News>的XML数据返回 */
  22.   public List<News> getParsedData()
  23.   {
  24.     return li; 
  25.   }
  26.   /* 将解析出的RSS title返回 */
  27.   public String getRssTitle()
  28.   {
  29.     return title; 
  30.   }
  31.   /* XML文件开始解析时调用此方法 */
  32.   @Override 
  33.   public void startDocument() throws SAXException
  34.   {
  35.     li = new ArrayList<News>(); 
  36.   }
  37.   /* XML文件结束解析时调用此方法 */
  38.   @Override 
  39.   public void endDocument() throws SAXException
  40.   {
  41.   }
  42.   /* 解析到Element的开头时调用此方法 */
  43.   @Override 
  44.   public void startElement(String namespaceURI, String localName, 
  45.                String qName, Attributes atts) throws SAXException
  46.   {
  47.     if (localName.equals("item"))
  48.     { 
  49.       this.in_item = true;
  50.       /* 解析到item的开头时new一个News对象 */
  51.       news=new News();
  52.     }
  53.     else if (localName.equals("title"))
  54.     {
  55.       if(this.in_item)
  56.       {
  57.         this.in_title = true;
  58.       }
  59.       else
  60.       {
  61.         this.in_mainTitle = true;
  62.       }
  63.     }
  64.     else if (localName.equals("link"))
  65.     {
  66.       if(this.in_item)
  67.       {
  68.         this.in_link = true;
  69.       }
  70.     }
  71.     else if (localName.equals("description"))
  72.     {
  73.       if(this.in_item)
  74.       {
  75.         this.in_desc = true;
  76.       }
  77.     }
  78.     else if (localName.equals("pubDate"))
  79.     { 
  80.       if(this.in_item)
  81.       {
  82.         this.in_date = true;
  83.       }
  84.     }
  85.   }
  86.   /* 解析到Element的结尾时调用此方法 */
  87.   @Override 
  88.   public void endElement(String namespaceURI, String localName,
  89.                          String qName) throws SAXException
  90.   {
  91.     if (localName.equals("item"))
  92.     {
  93.       this.in_item = false;
  94.       /* 解析到item的结尾时将News对象写入List中 */
  95.       li.add(news);
  96.     }
  97.     else if (localName.equals("title"))
  98.     {
  99.       if(this.in_item)
  100.       {
  101.         /* 设置News对象的title */
  102.         news.setTitle(buf.toString().trim());
  103.         buf.setLength(0);
  104.         this.in_title = false;
  105.       }
  106.       else
  107.       {
  108.         /* 设置RSS的title */
  109.         title=buf.toString().trim();
  110.         buf.setLength(0);
  111.         this.in_mainTitle = false;
  112.       }
  113.     }
  114.     else if (localName.equals("link"))
  115.     {
  116.       if(this.in_item)
  117.       {
  118.         /* 设置News对象的link */
  119.         news.setLink(buf.toString().trim());
  120.         buf.setLength(0);
  121.         this.in_link = false;
  122.       }
  123.     }
  124.     else if (localName.equals("description"))
  125.     {
  126.       if(in_item)
  127.       {
  128.         /* 设置News对象的description */
  129.         news.setDesc(buf.toString().trim());
  130.         buf.setLength(0);
  131.         this.in_desc = false;
  132.       }
  133.     }
  134.     else if (localName.equals("pubDate"))
  135.     {
  136.       if(in_item)
  137.       {
  138.         /* 设置News对象的pubDate */
  139.         news.setDate(buf.toString().trim());
  140.         buf.setLength(0);
  141.         this.in_date = false;
  142.       }
  143.     }
  144.   }
  145.   /* 取得Element的开头结尾中间夹的字符串 */
  146.   @Override 
  147.   public void characters(char ch[], int start, int length)
  148.   {
  149.     if(this.in_item||this.in_mainTitle)
  150.     {
  151.       /* 将char[]添加StringBuffer */
  152.       buf.append(ch,start,length);
  153.     }
  154.   } 
  155. }