zoukankan      html  css  js  c++  java
  • android 中如何解析Rss订阅的xml文件

    上代码:

    package com.android.rssreader;

    import java.io.IOException;
    import java.io.InputStream;

    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserException;
    import org.xmlpull.v1.XmlPullParserFactory;

    import android.app.Activity;
    import android.os.Bundle;

    public class RssReaderActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
       
        private void ParseRss(int thd, InputStream in) throws IOException, XmlPullParserException {
         String title = "";
         String pubDate = "";
         String link = "";
         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();
         xpp.setInput(in, null); //null 为编码格式,如utf-8,null为所有的。
         int eventType = xpp.getEventType();
         String tag = xpp.getName();
         
         //解析文件的头
         while(eventType != XmlPullParser.END_DOCUMENT) {
          if(eventType == XmlPullParser.START_TAG) {
           if(tag.equals("item")) {
            return;
           } else if(tag.equals("title")) {
            xpp.next();
            title = xpp.getText().toString();
           } else if(tag.equals("pubDate")) {
            xpp.next();
            pubDate = xpp.getText().toString();
           } else if(tag.equals("link")) {
            xpp.next();
            link = xpp.getText().toString();
           }
          } else if(eventType == XmlPullParser.END_TAG) {
           if(tag.equals("link")) {
            RssHead head = new RssHead(title, pubDate, link);
           }
          }
          eventType = xpp.next();
         }
         
         
         //解析文件的Item项
         String item_title = null;
         String item_pubtime = null;
         String item_link = null;
         String description = null;
         while(eventType != XmlPullParser.END_DOCUMENT) {
          if(eventType == XmlPullParser.START_TAG) {
           if(tag.equals("item")) {
            xpp.next();
            item_title = item_pubtime = item_link = description = "";
           } else if(tag.equals("title")) {
            xpp.next();
            item_title = xpp.getText().toString();
           } else if(tag.equals("link")) {
            xpp.next();
            item_link = xpp.getText().toString();
           } else if(tag.equals("pubTime")) {
            xpp.next();
            item_pubtime = xpp.getText().toString();
           } else if(tag.equals("description")) {
            xpp.next();
            description = xpp.getText().toString();
           }
          } else if(eventType == XmlPullParser.END_TAG) {
           if(tag.equals("item")) {
            RssItem ri = new RssItem(item_title,item_pubtime,item_link,description);
           }
          }
         }
         
         
         //以上的解析方法是针对双标签,例如<title>title</title>
         //下面的解析方法是针对的单标签,例如:<title href="www.google.cn"/>
         //这里我只写出大体的过程,具体自己琢磨了。
         
         while(eventType != XmlPullParser.END_DOCUMENT) {
          if(eventType == XmlPullParser.START_TAG) {
           if(tag.equals("title")) {
            //注意,这里不能用next()了,循环完了在用。
            for(int i=0; i<xpp.getAttributeCount(); i++) {
             if(xpp.getAttributeName(i).equals("href")) {
              String link2 = xpp.getAttributeValue(i);
              break;
             }
            }
            xpp.next();
           }
          }
         }
         
        }
    }

    下面的是RssItem.java和RssHead.java, 写的很粗糙。

    package com.android.rssreader;

    public class RssHead {

     private String title;
     private String pubDate;
     private String link;
     
     public RssHead(String title, String pubDate, String link) {
      // TODO Auto-generated constructor stub
      this.link = link;
      this.pubDate = pubDate;
      this.title = title;
     }
     public String getTitle() {
      return title;
     }
     public void setTitle(String title) {
      this.title = title;
     }
     public String getPubDate() {
      return pubDate;
     }
     public void setPubDate(String pubDate) {
      this.pubDate = pubDate;
     }
     public String getLink() {
      return link;
     }
     public void setLink(String link) {
      this.link = link;
     }
    }

    package com.android.rssreader;

    public class RssItem {

     private String item_title;
     private String item_pubDate;
     private String item_link;
     private String description;
     
     public RssItem(String title, String putDate, String link, String description) {
      // TODO Auto-generated constructor stub
      item_title = title;
      item_pubDate = putDate;
      item_link = link;
      this.description = description;
     }
     public String getItem_title() {
      return item_title;
     }
     public void setItem_title(String item_title) {
      this.item_title = item_title;
     }
     public String getItem_pubDate() {
      return item_pubDate;
     }
     public void setItem_pubDate(String item_pubDate) {
      this.item_pubDate = item_pubDate;
     }
     public String getItem_link() {
      return item_link;
     }
     public void setItem_link(String item_link) {
      this.item_link = item_link;
     }
     public String getDescription() {
      return description;
     }
     public void setDescription(String description) {
      this.description = description;
     }
    }

    还有,InputString 应该从Connection中拿到,还应该写一个获取连接的方法,今天太晚了,明天继续吧。

  • 相关阅读:
    Git: Host key verification failed(主机密钥验证失败)
    winrar 5.9.0 注册文件
    Intellij Idea开发: 手把手教你Java GUI开发,并且打包成可执行Jar程序
    axios 报 登出跨域 withCredentials: false,
    dist目录打war包命令 jar -cvf yourName_web.war *
    浅谈Dubbo服务
    PO BOX地址校验
    一次/etc/sudoers: syntax error near line 21问题的解决记录
    websocket+springboot原生
    自定义maven插件
  • 原文地址:https://www.cnblogs.com/shang53880/p/1887208.html
Copyright © 2011-2022 走看看