Announcement

Collapse
No announcement yet.

XML-Datei auslesen _ Switch

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML-Datei auslesen _ Switch

    Hallo.
    ich will via XmlPullParser eine xml.Datei auslesen.
    Die Besonderkeit ist, dass dass description-Tag nicht
    in jedem Item vorhanden ist:
    Die Datei sieht schematisch so aus:
    <item>
    <title>....</title>
    <description>...</description>
    <link>.....</link>
    <pubDate>....</pubDate>
    <guid></guid></item>
    <item>
    <title>....</title>
    <link>.....</link>
    <pubDate>....</pubDate>
    <guid></guid>
    </item>
    <item>
    <title>....</title>
    <link>.....</link>
    <pubDate>....</pubDate>
    <guid></guid>
    </item>
    <item>
    <title>....</title>
    <description>...</description>
    <link>.....</link>
    <pubDate>....</pubDate>
    <guid></guid>
    </item>
    <item>
    <title>....</title>
    <link>.....</link>
    <pubDate>....</pubDate>
    <guid></guid>
    </item>
    <item>
    <title>....</title>
    <description>...</description>
    <link>.....</link>
    <pubDate>....</pubDate>
    <guid></guid>
    </item>
    Die Originaldatei ist errechbar unter::
    https://www.rechtsprechung-im-intern.../bsjrs-bgh.xml

    mit meinem Code kann ich zwar die Datei lesen,

    while (eventType != XmlPullParser.END_DOCUMENT && !done) { tagName = parser.getName(); count++; switch (eventType) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: if (tagName.equals(ITEM)) { rssFeed = new RSSFeed(); } //if(parser.getName().equals(DESCRIPTION)){ //if( "description".equals(parser.getName()) == null){ //if (parser.getName().toString() != null) { funzt nicht if (tagName.equals(TITLE)) { title = parser.nextText() + "\r\n"; } else if ("description".equals(parser.getName())) { // flag = true; description = parser.nextText() + ""; } else if ("pubDate".equals(parser.getName())) { pubDate = parser.nextText(); } else if ("link".equals(parser.getName())) { link = parser.nextText(); } // } break;

    allerdings schreibt er den Inhalt des ersten
    description-Tag auch in die Items, die keinen desription -Tag haben, solange
    bis wieder ein Item mit description kommt. Letzteres schreibt er dann weiter bis
    wieder ein neues kommt; kuz um, es wird mit dem vorangegangen description-Tag die nachfolgenden
    items ohne description-Tags gefüllt.

    Mein Problem: Wie unterscheide ich die mit und ohne.description

    ich habs versucht mit
    //if(parser.getName().equals(DESCRIPTION)){
    //if( "description".equals(parser.getName()) == null){
    //if (parser.getName().toString() != null) {

    Kann mir jemand einen Hinweis geben, wie?

    Danke

  • #2
    Entschuldigt den schlechten source_Post

    while (eventType != XmlPullParser.END_DOCUMENT && !done) {

    tagName = parser.getName();
    count++;
    switch (eventType) {
    case XmlPullParser.START_DOCUMENT:
    break;

    case XmlPullParser.START_TAG:
    if (tagName.equals(ITEM)) {
    rssFeed = new RSSFeed();
    }
    //if (parser.getName().toString() == null) {
    //if (tagName.equals(DESCRIPTION) == null) {

    //if(parser.getName().equals(DESCRIPTION)){
    //if( "description".equals(parser.getName()) == null){
    //if (parser.getName().toString() != null) {
    if (tagName.equals(TITLE)) {
    title = parser.nextText() + "\r\n";
    } else if ("description".equals(parser.getName())) {
    // flag = true;
    description = parser.nextText() + "";
    } else if ("pubDate".equals(parser.getName())) {
    pubDate = parser.nextText();
    } else if ("link".equals(parser.getName())) {
    link = parser.nextText();
    }
    // }

    break;

    ich habe versucht nachzubessern

    Comment


    • #3
      Warum erfolgt der Vergleich in dem case das erste Mal mit dem tagName und bei weiteren mit parser.getName. Die Methode hat schon die Variable im Eingang belegt.
      Da man nicht weiß, was mach dem switch mit den Variablen passiert (description), dürfte wohl die Ursache sein, dass sie bei einem neuen Durchlauf/Event nicht geleert sind und den Inhalt des letzten Laufes drin haben. Der else-Zweig wird nicht durchlaufen, aber die Variable hat noch den alten Wert.

      Code:
      description ="description".equalsIgnoreCase(parser.getName())?parser.nextText():"";
      pubDate ="pubDate".equalsIgnoreCase(parser.getName())?parser.nextText():"";
      link ="link".equalsIgnoreCase(parser.getName())?parser.nextText():"";


      Weiterhin ist zu prüfen, ob man nicht mit XPATH einfacher zum Ziel kommt
      Zuletzt editiert von Christian Marquardt; 27.12.2022, 21:55.
      Christian

      Comment

      Working...
      X