XmlPullParser - Nested Tag analysieren

8

Ich habe dieses XML:

%Vor%

Nun, hier ist, was ich versuche zu tun, wenn das Tag-Tag-Attribut gleich Montag ist. Und dann ist das Mahlzeiten-Tag-Attribut gleich BREAKFAST , dann möchte ich das Attribut des Counters erhalten. "Brot".

Ich habe einen XML-Pull-Parser eingerichtet, aber ich habe Schwierigkeiten, diesen Wert zu bekommen. Hier ist, was ich versucht habe, jetzt sehe ich, dass es nicht funktionieren kann und nicht ... Also jede Hilfe, wie ich es einrichten könnte, wäre großartig.

%Vor%     
iqueqiorio 11.12.2014, 04:37
quelle

7 Antworten

6

Sie müssten Logik zum Analysieren verschachtelter Tags hinzufügen:

Ein sehr einfaches Beispiel, um Ihnen zu helfen voranzukommen:

Ich habe diesen String analysiert:

<menu><day name=\"monday\"><meal name=\"BREAKFAST\"><meal/><day/></menu>

Code:

%Vor%

Sie sehen den Unterschied, richtig?

Ich fügte das im Grunde hinzu, kurz nachdem ich den Tag bekommen hatte, was ich wollte. (In meinem Fall hart codierten String "Monday" .)

%Vor%

Und basierend auf diesem eventType2 , abgerufen tagName2 , was für "Essen" wäre

Ein besseres Beispiel , damit Sie Ihre Logik auf eine nette Art und Weise schreiben können.

Hoffe, das hilft.

    
MysticMagicϡ 19.12.2014 14:01
quelle
5

Erstens ist Ihr XML nicht im richtigen Format. Überprüfen Sie auf jeder Website. Sagen Sie auf diesem XML-Validator

Das schließende Tag sollte wie folgt aussehen

  

& lt; Mahlzeit & gt; & lt; / Mahlzeit & gt;

     

nicht = & gt; & lt; Essen & gt; & lt; Essen / & gt;

Nach dem Korrigieren von XML als response String unten, Sie können diesen Code ausprobieren, es funktioniert

%Vor%

Hoffe das hilft dir bei deinem Problem .. !!!!

    
ajitksharma 18.12.2014 10:59
quelle
3

Nun, schauen Sie sich logisch Ihre switch-Anweisung an:

%Vor%

Sehen Sie das Problem genau dort? Sie werden nicht immer tagName.equals("day") und tagName.equals("meal") beide wahr sein! Erhalte das child des xmlData und erhalte seinen Namen, dann führe eine andere if-Anweisung aus.

Sie müssen den Wert von tagName nach jedem if aktualisieren.

    
Alex K 15.12.2014 02:57
quelle
2
%Vor%

Zunächst fehlen Pausen in Ihrer switch-case-Anweisung. Zweitens werden Attribute immer aus dem Fall START_TAG geparst. Text-Inside-Tags werden im TEXT-Case analysiert und END_TAG ist nützlich, um Objekte oder Arraylists basierend auf ihrer Verschachtelung zu erstellen.

onProgressUpdate muss so aussehen:

%Vor%     
Amrut Bidri 11.12.2014 04:55
quelle
2

Hauptidee

Speichern Sie Ihre Informationen in einer lokalen Variablen und überprüfen Sie dann, ob besuchte Tags Ihrem gewünschten Muster entsprechen oder nicht, wenn dies der Fall ist, tun Sie, was Sie wollen. Hier ist die Idee:

%Vor%     
mmlooloo 15.12.2014 04:08
quelle
2

Verwenden Sie XPath und seien Sie in Frieden

%Vor%     
ReXdean 21.12.2014 20:09
quelle
2

Zuerst ist dein XML defekt, sieh dir die End-Tags an. Sollte sein:

%Vor%

Zweitens sollten Sie nicht einen Pull-Parser verwenden, Sie verwenden viele Codezeilen, aber es gibt kürzere Wege zu Ihrem Ziel (zB XMLBeam ( Offenlegung: Ich bin mit diesem Projekt verbunden )):

%Vor%

}

    
Cfx 15.12.2014 13:04
quelle