| |||||||
Das Thema "Auslesen einer (eigenartigen) XML-Datei" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 06.09.2011
Beiträge: 1
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
| ich habe mich eben hier registriert, da mir dieses Forum bereits bei anderen Fragen weitergeholfen hat und mir die Community zusagt. Ich möchte auch direkt mit einer Frage starten, bei der mir sie übliche Google- und Foren-Suche bislang nicht weiterhelfen konnte. Ich möchte für eine Android-App die aktuellsten Daten beim Initialisieren aus dem Internet laden und in eigene Objekte schreiben. Das wäre kein Problem, wäre der Aufbau der XML-Datei anders, aber ich bekomme sie nunmal so vom Server. Auf die Struktur der zu ladenden XML-Datei habe ich keinen Einfluss, da dies eine bereitgestellte Schnittstelle für mehrere Apps ist. Vereinfacht sieht die XML-Datei so aus: Code: <array> <dict> <key>ID</key> <string>1</string> <key>Name</key> <string>Irgendein Name</string> <key>Datum</key> <string>18.11.2010</string> <key>Ort</key><string>Beispielhafter Ort</string><key>Uhrzeit</key><string>15:00 - 19:00</string> </dict> <dict> <key>ID</key> <string>2</string> <key>Name</key> <string>Irgendein Name 2</string> <key>Datum</key> <string>19.11.2010</string> <key>Ort</key><string>Beispielhafter Ort2</string><key>Uhrzeit</key><string>12:00 - 21:00</string> </dict> </array> Code: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(in); // der InputStream aus'm Web
doc.getDocumentElement().normalize();
NodeList entries = doc.getElementsByTagName("dict");
for (int s = 0; s < entries.getLength(); s++) {
Node entry = entries.item(s);
if (entry.getNodeType() == Node.ELEMENT_NODE) {
Element fstElmnt = (Element) entry;
NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("Name");
Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
NodeList fstNm = fstNmElmnt.getChildNodes();
String name = ((Node) fstNm.item(0)).getNodeValue();
}
} Ich bin euch für Eure Antworten wirklich dankbar ![]() Beste Grüße, chemistry *edit* Ich habe es nun vorerst so gelöst, es ist aber keinesfalls eine Lösung, die mir besonders gut gefällt: Code: int id = Integer.parseInt(nodeList.item(0).getChildNodes().item(0).getNodeValue()); String name = nodeList.item(1).getChildNodes().item(0).getNodeValue(); String date = nodeList.item(2).getChildNodes().item(0).getNodeValue(); String location = nodeList.item(3).getChildNodes().item(0).getNodeValue(); Geändert von chemistry (06.09.2011 um 20:23 Uhr) Grund: Passenderer Titel |
| | |
| | #2 (permalink) |
| Android Experte Modell: HTC Hero Registriert seit: 14.10.2009
Beiträge: 612
Abgegebene Danke: 18
Erhielt 42 Danke für 40 Beiträge
|
1. Lass die Finger von DOM-Parser. Es ist nur für kleine dokumente tauglich 2. Nimm entweder SAX oder Pull-Parser 3. Benutze einen Databinding-Framework
__________________ _____________________________________________ Meine apps: http://www.pribluda.de/android Suche Schriftmuster von Prepaid-Auflade-Bons |
| | |
| | #3 (permalink) |
| Neuer Benutzer Modell: Motorola Defy Registriert seit: 11.03.2011
Beiträge: 7
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Ich würde an der Stelle auch die Finger von einem DOM-Parser lassen, nicht wegen der Dokumentgrösse(ganz im Gegenteil, ich finde gerade dann DOM Parser unersetzlich) sondern vielmehr wegen der eigenartigen Dokumentstruktur - ich wüsste nciht wie man aus einem Baum lesen kann welcher Key zu welchem String gehört. hier scheint SAX das mittel der Wahl zu sein - ohne konkretes codebeispiel hier meine Vorgehensweise: Variablen deklarieren: Code: List<Map<String,String>> result = new LinkedList<Map<String,String>>(); String keyval[] = new String[2]; int i; Map<String,String> tmp startElement(String name): Code: if(name.equals("dict")) tmp = new HashMap<String,String>();
else if (name.equals("key")) i=0;
else if (name.equals("string")) i=1; Code: keyval[i]=text; Code: if(name.equals("dict")) result.add(tmp);
else if(name.equals("string")) tmp.put(keyval[0], keyval[1]); Jedenfalls solltest du jetzt alle Daten vernünftig hinterlegt haben, um zB an alle Namen heranzukommen: Code: for(Map<String,String> data:result) {
System.out.println("Name: "+data.get("Name"));
} |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Probleme beim lesen einer XML Datei | Raidri | Android App Entwicklung | 2 | 03.09.2011 15:53 |
| XML auslesen bei unterschiedlichen ChildNodes | jimboo | Android App Entwicklung | 3 | 14.11.2010 20:09 |
| XML in App auslesen und verarbeiten | SeraphimSerapis | Android App Entwicklung | 2 | 25.07.2010 20:05 |
| Probleme beim einlesen von einer XML Datei | Raidri | Android App Entwicklung | 4 | 20.05.2010 01:00 |
| Probleme beim einlesen von einer XML Datei | Raidri | Android App Entwicklung | 0 | 27.03.2010 00:32 |