SherlockFragments + XML Parser

  • Antworten:8
Michael
  • Forum-Beiträge: 5

12.11.2013, 10:37:05 via Website

Hallo Leute,

bin neu hier und auch ein blutiger Anfänger bei der App-Entwicklung. Ich habe mich zur Zeit mit Tutorials und Bausteinen beholfen, damit ich zu meiner ersten App komme. Habe auch schon das Grundgerüst fertig. DIes habe ich mit ActionBarSherlock realisiert. Mit allem drum und dran... Fragment Tabs, Side Menu Navigation,...

Jetzt habe ich mal den Grundbaustein. Nur leider finde ich nichts, wie ich weiterkomme... Ich habe eine XML-Datei die ich über http zur Verfügung stelle. Ich möchte lediglich die XML-Datei beim Starten der App (oder zB mit einem Button) herunterladen und danach auslesen sowie auf einem der Tabs aus den Tutorials darstellen.
Kann mir da jemand irgendwie weiterhelfen, wie ich das am besten angehe oder mir entsprechende Tutorials zukommen lassen? Habe zwar etwas gefunden, nur leider schaffe ich es nicht, dass ich das auf einem der Tabs darstellen, die ich zur Zeit habe.

Wäre sehr sehr dankbar, wenn mir da jemand irgendwie weiterhelfen könnte.

Vielen Dank im Voraus.


Lg, Michael

Antworten
Christian
  • Forum-Beiträge: 307

12.11.2013, 11:08:58 via Website

Hi Michael,

um eine XML zu parsen gibt es in der Regel 3 Wege: SAX, DOM oder XmlPullParser.

Ich würde dir raten das du SAX oder den XmlPullParser nimmst. DOM sollte mann nur nutzen wenn man eine XML erstellt bzw eine bearbeitet. Er ist ein sehr speicherlastiger Parser da er das komplette Dokument in den Speicher des Gerätes lädt. Bei mobilen Geräten ist dieser aber sehr begrenzt.

Habe zwar etwas gefunden, nur leider schaffe ich es nicht, dass ich das auf einem der Tabs darstellen, die ich zur Zeit habe.

Keine Ahnung wo da das Problem liegt, solange du keinen Code postest ist eh alles nur Kaffesatz lesen.

Mfg Christian

— geändert am 12.11.2013, 11:10:28

Antworten
Michael
  • Forum-Beiträge: 5

12.11.2013, 11:59:32 via Website

Hallo Christian,

ich darf als Neuling keine externen Links posten. Hätte sonst gerne die Tutorials gezeigt. Aber macht nix. Wird schon irgendwie zu schaffen sein.

Ja, die drei Arten habe ich mir schon angeschaut, nur bin ich mir nicht sicher was das richtige ist. Das XML-File umfasst fast 580 DIN A4 Seiten wenn man es ausdrucken würde. Darin sind sämtliche Daten zu Sportstatistiken enthalten.

Vielleicht kannst du mir nur generell mal erklären wie ich das am besten angehe bzw wie ich das aufteilen muss. Denn ich muss auf einer Seite die Übersicht der einzelnen Divisionen/Gruppen machen, die zweite Seite zeigt einen Spielplan über erfolgte und noch kommende Spiele und die dritte seite enthält etwas anderes, das aber noch nicht festgelegt ist.

Wie gehe ich das Problem überhaupt an, dass ich die richtigen Daten aus dem XML rausbekomme?

Quellcodes reiche ich natürlich bei Gelegenheit nach, wenn ich zu Hause bin.

Danke & Lg, Michael

Antworten
Christian
  • Forum-Beiträge: 307

12.11.2013, 13:56:22 via Website

Hi Michael,


Ja, die drei Arten habe ich mir schon angeschaut, nur bin ich mir nicht sicher was das richtige ist.
Wie gesagt zum reinen auslesen solltest du immer SAX oder den XmlPullParser nutzen. Ein richtig oder falsch gibt es da nicht, beide Parser machen genau das was sie machen sollen.

Am besten wählst du einen von den beiden aus und versuchst einen kleine XML zu parsen. Wenn du merkst du kommst gut mit dem klar, nimm ihn für dein Projekt.


Das XML-File umfasst fast 580 DIN A4 Seiten wenn man es ausdrucken würde. Darin sind sämtliche Daten zu Sportstatistiken enthalten.
Oha...580 Seiten...mmhh das ist echt viel...ich glaube da solltest du dir was anderes überlegen.

Ich geh mal davon aus du lädst die Daten (XML) von irgendeiner Sport- bzw. Statistik-Seite. Als erstes solltest du schauen ob du dir Daten nicht auch einzeln laden kannst, also nicht eine große XML sondern mehre kleine. Sollte das nicht gehen, solltest du mal schauen ob du einen Webserver zwischen Gerät und Sportseite schalten kannst. Dieser Server lädt die große XML von der Sportseite und spaltet sie in viele kleiner XML Datein auf. Das hat den Vorteil das zum Gerät nur Datenübertragen werden die da auch gebraucht werden und nicht nicht alle 580 Seiten.

Als nächstes solltest du schauen welche Daten sich nicht änderen, also sowas wie Teamnamen, Stadien oder Gruppen auswahlen. Diese könntest du dann in deiner App hard verdrahten. Das bedeutet du musst sie nicht immer auf Gerät übertragen, damit sparst du bzw dein Appnutzer Trafic und das parsen der XML wird auch schneller. Da jetzt in der kleinen XML nur noch Daten stehen die sich wirklich ändern.
Danach solltest du schauen wie oft ändern sich diese Daten in der kleinen XML. Zum Beispiel ändern sich Spielergebnisse in der Regel nur am Spieltag es muss also auch nicht beim jeden Netzwerkaufruf diese Daten übertragen werden.

Das wichtigste dabei ist aber das du DIR vorher überlegst welche Daten brauchst du wirklich in deiner App.



Vielleicht kannst du mir nur generell mal erklären wie ich das am besten angehe bzw wie ich das aufteilen muss. Denn ich muss auf einer Seite die Übersicht der einzelnen Divisionen/Gruppen machen, die zweite Seite zeigt einen Spielplan über erfolgte und noch kommende Spiele und die dritte seite enthält etwas anderes, das aber noch nicht festgelegt ist.
Na damit hast du doch deine Aufteilung: Gruppen, Spielplan, 3 Seite. Jetzt musst du dir die Struktur der großen XML Datei ansehen und schauen wo da die Daten die du brauchst stehen. Wo das ist kann ich dir natürlich nicht sagen, da ich erstens nicht weiß was du brauchst bzw. zweiten nicht weiß wie die XML aussieht. Wenn du gefunden hast was du suchst, musst du die XML halt nur noch parsen. Wie das parsen jetzt geht hängt halt davon ab welchen Parser du ausgewählt hast.


Wie gehe ich das Problem überhaupt an, dass ich die richtigen Daten aus dem XML rausbekomme?
Wenn du den Aufbau/Struktur der XML kennst ist das relative einfach da sich diese in den wenigesten Fällen nachträglich ändert. Auch stehen die Daten immer in der gleichen Stelle bzw im gleichen Tag. Wie gesagt der Knackpunkt dabei ist das du dir die XML ansehen musst und schauen musst wo die Daten stehen. Ist auf der Seite wo du die Daten her hast nicht erklärt wie die XML aufgebaut ist?

Mfg Christian

— geändert am 12.11.2013, 14:13:20

Antworten
Michael
  • Forum-Beiträge: 5

12.11.2013, 14:24:11 via Website

Danke vielmals für deine Umfangreiche Antwort.

Um kurz darauf einzugehen... Das splitten der XML ist leider so auf die Schnelle nicht möglich. Denn die XML bekomme ich aus dem Live-System der Statistikseite, aus der auch diese die Daten bezieht.
Die XML habe ich mir zu Testzwecke auf den Rechner geladen, und danach geschaut wie diese aufgebaut ist. Ich habe gemerkt, dass der Inhalt bzw die Tags sehr Umfangreich sind und teilweise auch doppelt:

zB gibt es bei den Divisions-Namen Tags für die jeweilige Sprache:

1-<division>
2 <lid>12</lid>
3 <divid>146</divid>
4 -<divname>
5 <de>Gruppe A</de>
6 <en>Gruppe A</en>
7 <swe>Gruppe A</swe>
8 <fin>Gruppe A</fin>
9 <cze>Gruppe A</cze>
10 <rus>Gruppe A</rus>
11 <ita>Gruppe A</ita>
12 </divname>
13 <line1>0</line1>
14 <line2>0</line2>
15 <line3>0</line3>
16 -<teams>
17 -<team>
18 <id>29</id>
19 <thid>390</thid>
20 <rank>1</rank>
21 -<sname>
22 <de>Teamname </de>
23 <en>Teamname </en>
24 <swe>Teamname </swe>
25 <fin>Teamname </fin>
26 <cze>Teamname </cze>
27 <rus>Teamname </rus>
28 <ita>Teamname </ita>
29 </sname>
30 -<ssname>
31 <de>Team</de>
32 <en>Team</en>
33 <swe>Team</swe>
34 <fin>Team</fin>
35 <cze>Team</cze>
36 <rus>Team</rus>
37 <ita>Team</ita>
38 </ssname>
39 <gamesplayed>2</gamesplayed>
40 <win>2</win>
41 <pts>4</pts>
42 <tie>0</tie>
43 <loss>0</loss>
44 <otwin>0</otwin>
45 <otloss>0</otloss>
46 <goalf>12</goalf>
47 <goala>4</goala>
48 <goalfmod>0</goalfmod>
49 <goalamod>0</goalamod>
50 <bonusp>0</bonusp>
51 <ptsmod>0</ptsmod>
52 </team>

Das ist nur mal ein Ausschnitt wie die Struktur aussieht. Und das ist zB nur Gruppe A mit der ersten Mannschaft und die Daten für die Gesamttabelle der Mannschaft "Teamname". Für mich ist das sehr unübersichtlich und irgendwie bringe ich es nicht auf die Reihe es zB auf ein Tutorial umzulegen. Stehe sozusagen total auf der Leitung. Weil ich will "nur" auf einer Seite zB die Gruppenübersicht und wenn man auf eine Gruppe tippt, kommt man auf die ganze Tabelle. Also Seite 1 würde nur den Gruppennamen/Divisionsnamen enthalten. Gut, Team- und Gruppennamen kann ich auch fix reinschreiben in meiner App, an dem soll es nicht scheitern. Stehe halt das erste mal vor so einer Herausforderung.
Ich hoffe ich kanns so Beschreiben, dass man auch weiß was ich meine :-)

Ist es ein Problem, dass es zB beim Tag "sname" und "ssname" auch die Tags "de", "en" usw gibt gleich wie beidem Namen der Gruppe?
Danke vielmals.

Lg, Michael

— geändert am 12.11.2013, 14:34:49

Antworten
SvenDD
  • Forum-Beiträge: 272

12.11.2013, 14:44:45 via Website

Eigentlich musst du zuerst die XML nach den Gruppen parsen und diese in einer Liste auflisten. In dieser Liste reagierst du dann auf den Gruppennamen-Klick und öffnest eine neue Activity, die mit weiteren Informationen gefüllt wird. Z.B. Gruppenspezifischen Informationen aus der XML.


Ich will dich nicht entmutigen, aber für einen blutigen Anfänger ist das ein zu großes Projekt, vorallem, wo du dir vorerst alles aus den Tutorials zurecht kopierst. :(

Antworten
Michael
  • Forum-Beiträge: 5

12.11.2013, 14:48:01 via Website

mara.grey
Eigentlich musst du zuerst die XML nach den Gruppen parsen und diese in einer Liste auflisten. In dieser Liste reagierst du dann auf den Gruppennamen-Klick und öffnest eine neue Activity, die mit weiteren Informationen gefüllt wird. Z.B. Gruppenspezifischen Informationen aus der XML.


Ich will dich nicht entmutigen, aber für einen blutigen Anfänger ist das ein zu großes Projekt, vorallem, wo du dir vorerst alles aus den Tutorials zurecht kopierst. :(
Ich weiß. Aber ich habe da keinen zeitlichen Stress und auch keine finanziellen Abhängigkeiten. Sozusagen eine ehrenamtliche Arbeit. Ich arbeite sehr gerne so, wenn ich mir etwas neues beibringen möchte. Das Projekt is groß, ich weiß, und wirklich sehr mühsam... Aber ein Hobby braucht doch jeder ;-)

Das mit den verschiedenen Activities und wann ich darauf reagieren muss, das habe ich schon heraußen. Funktioniert ja schon in der Hardcoded Version :-)
Wie kann ich in dem großen File nur einen bestimmten Gruppennamen filtern? Denn ich muss ja mit den Tags arbeiten. Und der Gruppenname steht zB im Tag <de>/<de>. Dieser Tag ist ja auch beim den Teams vorhanden. Stört das dann nicht?
Ich weiß, dass man sowas nicht tut, aber ich wäre äußerst dankbar für einen Beispielcode der auf mein XML-File passt. Wie schon gesagt, mit den Tutorials komme ich noch nicht auf nen grünen Zweig. Mir fehlt da noch der Zusammenhang und ein wenig der Durchblick. Den Rest mache ich natürlich selber. Aber für so etwas bin ich noch nicht tief genug in der Marterie drin.

Vielen Danke & Lg, Michael

— geändert am 12.11.2013, 14:55:06

Antworten
SvenDD
  • Forum-Beiträge: 272

12.11.2013, 15:06:34 via Website

Alles klar :)

Das ist halt eben die Arbeit dir einen XML Parser zu schreiben, dass wenn auf den XML-Tag <gruppe> trifft, dort den Namen unter <de> </de> findet, etc. pp..

Antworten
Michael
  • Forum-Beiträge: 5

12.11.2013, 15:15:44 via Website

Verstehe, verstehe...

dann werde ich noch etwas suchen müssen. Denn so richtige Tuts habe ich noch nicht gefunden, wo ich nachlesen kann wie man nur einen Teil ausliest...

Danke & Lg, Michael

Antworten