XMLPullParser Rss Fragen

  • Antworten:6
  • Bentwortet
Gerhard P.
  • Forum-Beiträge: 46

10.07.2014, 15:00:14 via Website

Habe folgenden Parser und da bekomm ich immer die Ersten titel Tags (Seitennamen) Angezeigt! wie kann ich das umgehen?

Richtig wäre es ja, wenn er ab item erst liest...

import android.util.Xml;

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

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class SturmRssParser {

  // We don't use namespaces
  private final String ns = null;

  public List<RssItem> parse(InputStream inputStream) throws XmlPullParserException, IOException {
      try {
          XmlPullParser parser = Xml.newPullParser();
          parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
          parser.setInput(inputStream, null);
          parser.nextTag();
          return readFeed(parser);
      } finally {
          inputStream.close();
      }
  }

  private List<RssItem> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
      parser.require(XmlPullParser.START_TAG, null, "rss");
      String title = null;
      String link = null;

      List<RssItem> items = new ArrayList<RssItem>();
      while (parser.next() != XmlPullParser.END_DOCUMENT) {
          if (parser.getEventType() != XmlPullParser.START_TAG) {
              continue;
          }
          String name = parser.getName();

          if (name.equals("title")) {
              title = readTitle(parser);
          } else if (name.equals("link")) {
              link = readLink(parser);

        }
          if (title != null &amp;&amp; link != null) {
                RssItem item = new RssItem(title, link);
              items.add(item);
              title = null;
                link = null;

          }
      }
        return items;
  }

  private String readLink(XmlPullParser parser) throws XmlPullParserException, IOException {
      parser.require(XmlPullParser.START_TAG, ns, "link");
      String link = readText(parser);
      parser.require(XmlPullParser.END_TAG, ns, "link");
      return link;
  }

  private String readTitle(XmlPullParser parser) throws XmlPullParserException, IOException {
      parser.require(XmlPullParser.START_TAG, ns, "title");
      String title = readText(parser);
      parser.require(XmlPullParser.END_TAG, ns, "title");
      return title;
  }


  // For the tags title and link, extract their text values.
  private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
      String result = "";
      if (parser.next() == XmlPullParser.TEXT) {
          result = parser.getText();
          parser.nextTag();
      }
      return result;
  }


}

— geändert am 10.07.2014, 15:02:42

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.07.2014, 15:25:19 via Website

Wie meinst du das?
Bitte mal genauer erklären. Evntl. XML beispiel dazu.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gerhard P.
  • Forum-Beiträge: 46

10.07.2014, 16:00:28 via Website

RSS feed Sieht ja So aus

<channel> <titel> Seitenname/<titel> usw.

und dann kommen erst die Beiträge die mit <item> <title>
Headline/<title> <pubDate> 2014 /<puDate>

usw...

mein Problem liegt jetzt darin, das ich die Title Tags auslese und er mir den ersten auch Anzeigt! Ich möchte, das aber erst die Titel Tags ab den Beiträgen anzeigt werden!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.07.2014, 16:19:36 via Website

Dann darfst du das übergeordnete Tag nit title nennen, denn dann ist die Bezeichnung nicht eideutig.
Woher soll der Parser denn wissen, welches title Tag du jetzt habe willst?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gerhard P.
  • Forum-Beiträge: 46

10.07.2014, 16:43:29 via App

Is mir schon klar.... Aber wenn ichs item nenn ... Dann bekomm ich doch nicht die Überschrift... Oder? Weil er ja dann alles dazwischen ausliest.... Also von der Überschrift bis zum Autor... Und ich möchte ja nur den title Tag...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.07.2014, 16:46:44 via Website

welches ititel XML Tag möchtest du denn haben?
Wenn das erste title heisst, dann liest er alle Seitennamen.
Wenn das 2. Titel heisst, dann werden alle Headlines gelesen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gerhard P.
  • Forum-Beiträge: 46

11.07.2014, 23:09:22 via Website

Hab die Zeilen so ergänzt und .. das Ergebnis erreicht! Danke für die Hilfe

    String name = parser.getName();
    if (name.equals("item")) {
        readItemContent = true;
    }
    if (readItemContent)
    {
        if (name.equals("title")) {
            title = readValue(parser, "title");
        } else if (name.equals("link")) {
            link = readValue(parser, "link");
        } else if (name.equals("pubDate")) {

Antworten