Java List ausgeben

Fr34k9

Grünschnabel
Huhu, bin mehr oder weniger Anfänger, konnte es bereits, jetzt jedoch nicht mehr^^
Habe keinen Plan mehr =( Aber egal.

Ich möchte ein RSS-Feed Programm machen, daher RSS-Feeds auszugeben. Ich schaffe es auch ohne Probleme die Feeds herunterzuladen und dann nur die Sachen im XML "<title>" auszugeben. Dann jedoch wenn ich noch "<description>" machen muss geht nix mehr, sobald ich mit einer Liste arbeite.

Code: (RssFeed.java)
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rssfeed;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
 *
 * @author ~Z~
 */
public class RssFeed {

    /**
     * @param args the command line arguments
     */
    List myNews;
    Document doc;

    public RssFeed(){
	myNews = new ArrayList();
    }

    public void runExample(){
	parseXML("http://ticker.gulli.com/rss");
	parseXML("http://www.20min.ch/rss/rss.tmpl?type=channel&get=9");
	printData();
    }

    private void parseXML(String NewURL){
	try {
	    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
	    URL url = new URL(NewURL);
	    Document doc = builder.parse(url.openStream());
	    NodeList nodes = doc.getElementsByTagName("item");
	    if(nodes != null && nodes.getLength() > 0){
		for (int a = 0; a < nodes.getLength(); a++) {
		    Element el = (Element)nodes.item(a);
		    String title = getTextValue(el,"title");
		    String description = getTextValue(el,"description");
		    News i = new News(title,description);

		    myNews.add(i);
		}
	    }
	    } catch(ParserConfigurationException pce) {
	        pce.printStackTrace();
	    }catch(SAXException se) {
		se.printStackTrace();
	    }catch(IOException ioe) {
	        ioe.printStackTrace();
	    }
	}

    private String getTextValue(Element ele, String tagName){
	String textVal = null;
	NodeList nodes = ele.getElementsByTagName(tagName);
	if(nodes != null && nodes.getLength() > 0){
	    Element el = (Element)nodes.item(0);
	    textVal = el.getFirstChild().getNodeValue();
	}
	return textVal;
    }

    private void printData(){
	System.out.println("Einträge: '" + myNews.size() + "'");
	Iterator it = myNews.iterator();
	while(it.hasNext()) {
	    Object i = it.next();
	    System.out.println(i);
	}
    }

    public static void main(String[] args){
	RssFeed dpe = new RssFeed();
	dpe.runExample();
	System.out.println();
    }
}

Code: (News.java)
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rssfeed;

/**
 *
 * @author ~Z~
 */
class News {
    private String title;
    private String description;

    public News(String title, String description) {
	this.title = title;
	this.description = description;
    }

}

Ausgabe:
Code:
run:
Einträge: '45'
rssfeed.News@46ae506e
rssfeed.News@5e228a02
rssfeed.News@2d92b996
rssfeed.News@7bd63e39
rssfeed.News@2e8f4fb3
rssfeed.News@42b988a6
rssfeed.News@22ba6c83
rssfeed.News@7d2a1e44
rssfeed.News@5829428e
rssfeed.News@7cd0a5d9
rssfeed.News@66388993
rssfeed.News@9d04653
rssfeed.News@48b8f82d
rssfeed.News@67ad77a7
rssfeed.News@2d8aaa1e
rssfeed.News@6aa6aeed
rssfeed.News@6526804e
rssfeed.News@42b1b4c3
rssfeed.News@20d2906a
rssfeed.News@60072ffb
rssfeed.News@77df38fd
rssfeed.News@6016a786
rssfeed.News@6f507fb2
rssfeed.News@defb836
rssfeed.News@7526e85f
rssfeed.News@4d61f10f
rssfeed.News@59193779
rssfeed.News@68916a2
rssfeed.News@122ce908
rssfeed.News@4277158a
rssfeed.News@1827391d
rssfeed.News@3716ab4e
rssfeed.News@3148aa23
rssfeed.News@1999f91c
rssfeed.News@4bb1aa65
rssfeed.News@7d29f3b5
rssfeed.News@4d3f3045
rssfeed.News@6f7a29a1
rssfeed.News@3d434234
rssfeed.News@aaf8358
rssfeed.News@8d80be3
rssfeed.News@1ff4689e
rssfeed.News@67006d75
rssfeed.News@4d125127
rssfeed.News@6d8dfef8

BUILD SUCCESSFUL (total time: 4 seconds)

Hoffe jemand kann mir helfen =)

Greetz
PS: First Post! =)
 
Hi.

Verwendest du denn noch Java 1.4? Seit Java 1.5 verwendet man generische Klassen (List<News>).

Du müßtest die toString Methode der News Klasse überschreiben.

Gruß
 
Öhm, wenn du mir sagst wo ich das nachsehe welches Java ich habe kann ich es dir sagen =)
Ausserdem, kannst du mir sagen wie ich dies machen sollte? Ich habe dies nach einer Anleitung versucht zu machen und noch grössere Teile selbst eingebaut.

Greett
 
Build 1.6 =)
Aber nun zurück zum Problem, wie schaff ich es denn nun die Beschreibung zu bekommen?

Greetz
 
Hi.

Wie schon gesagt, du könntest die toString Methode der News Klasse überschreiben:
Java:
class News {
   ...

   @Override
   public String toString() {
      return this.title + "\n-- " + this.description;
   }
}
Du könntest auch Getter Methoden in der News Klasse implementieren.

Gruß
 
Also das mit dem toString funktioniert =)
Das mit der Getter methode funktioniert jedoch nicht. Und dies bräuchte ich eigentlich... Wie die Getter gehen weiss ich, nur wo muss ich was einfügen dass das dann auch geht?
 
Das mit der Getter methode funktioniert jedoch nicht. Und dies bräuchte ich eigentlich... Wie die Getter gehen weiss ich, nur wo muss ich was einfügen dass das dann auch geht?
Erstmal solltest du statt List eine List<News> verwenden.
Java:
 List<News> myNews;

...

    myNews = new ArrayList<News>();
Dann kannst du über die ganzen News iterieren und die Informationen die du möchtest ausgeben:
Java:
for (News n: myNews) {
  System.out.println(n.getTitle());
  ...
}
Gruß
 

Neue Beiträge

Zurück