如何检索RSS提要?

时间:2013-07-25 03:05:37

标签: android rss

我想从链接app2.nea.gov.sg/data/rss/nea_psi.xml中检索标题和说明。这是一个RSS提要。我怎么能这样做?

我的代码:

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /** Create a new layout to display the view */
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(1);

        /** Create a new textview array to display the results */
        TextView name[];
        TextView website[];


        try {

            URL url = new URL(
                    "http://app2.nea.gov.sg/data/rss/nea_psi.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("item");

            /** Assign textview array lenght by arraylist size */
            name = new TextView[nodeList.getLength()];
            website = new TextView[nodeList.getLength()];


            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);

                name[i] = new TextView(this);
                website[i] = new TextView(this);


                Element fstElmnt = (Element) node;
                NodeList nameList = ((Document) fstElmnt).getElementsByTagName("title");
                Element nameElement = (Element) nameList.item(0);
                nameList = ((Node) nameElement).getChildNodes();
                name[i].setText("title = "
                        + ((Node) nameList.item(0)).getNodeValue());

                NodeList websiteList = ((Document) fstElmnt).getElementsByTagName("description");
                Element websiteElement = (Element) websiteList.item(0);
                websiteList = ((Node) websiteElement).getChildNodes();
                website[i].setText("description  = "
                        + ((Node) websiteList.item(0)).getNodeValue());



                layout.addView(name[i]);
                layout.addView(website[i]);


            }
        } catch (Exception e) {
            System.out.println("XML Pasing Excpetion = " + e);
        }

        /** Set the layout view to display */
        setContentView(layout);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name ="@+id/result"
    />

</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

import java.net.URL;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class XMLParsingDOMExample extends Activity {

    ArrayList<String> title;
    ArrayList<String> description;

    public TextView title_text;
    public TextView des_text;

    //ItemAdapter adapter1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainpage_listitem_activity);

        //ListView list = (ListView) findViewById(R.id.list);
        title = new ArrayList<String>();
        description = new ArrayList<String>();  

        title_text = (TextView) findViewById(R.id.title_text);
        des_text = (TextView) findViewById(R.id.des_text);

        try {

            URL url = new URL(
                    "http://app2.nea.gov.sg/data/rss/nea_psi.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("item");
            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);       

                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("title");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();         

                title.add(""+ ((Node) nameList.item(0)).getNodeValue());

                NodeList websiteList = fstElmnt.getElementsByTagName("description");
                Element websiteElement = (Element) websiteList.item(0);
                websiteList = websiteElement.getChildNodes();

                description.add(""+ ((Node) websiteList.item(0)).getNodeValue());           

            }
        } catch (Exception e) {
            System.out.println("XML Pasing Excpetion = " + e);
        }


        title_text.setText(""+title.get(0));

        String temp = Html.fromHtml(description.get(0)).toString(); 
        String a[] = temp.split("\\)");
        des_text.setText(""+a[0]+")");
    }

mainpage_listitem_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
     > 
            <TextView 
                android:id="@+id/title_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"     
                android:text="title"
                android:layout_margin="5dp"
                android:textSize="22dp"
                android:textColor="#FFFFFF"/>   

             <TextView 
                android:id="@+id/des_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"     
                android:gravity="center"
                android:text="description "
                android:layout_margin="5dp"
                android:textSize="18dp"
                android:textColor="#FFFFFF"/>   
</LinearLayout>

答案 1 :(得分:0)

使用以下库来获取RSS源:

https://github.com/ahorn/android-rss