- Forum-Beiträge: 770
16.04.2016, 15:47:21 via Website
16.04.2016 15:47:21 via Website
Hallo,
mit einem XmlPullParser möchte ich eine vorher geschriebene (über XmlSerializer) XML-Datei einlesen. Der Code dafür sieht so aus:
public void cmm_CubeDatenLaden(File VerwaltungsXmlDatei) {
// http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
String tmp_CubeRaumName = "";
Byte tmp_CubeRaumSN = 0;
String tmp_CubeDeviceName = "";
int tmp_CubeDeviceRaumId = 0;
String tmp_CubeDeviceRFA = "";
String tmp_CubeDeviceSN = "";
try {
XmlPullParserFactory factory = newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new FileReader(VerwaltungsXmlDatei));
int EventType = xpp.getEventType();
while (EventType != XmlPullParser.END_DOCUMENT) {
if (EventType == XmlPullParser.START_DOCUMENT) {
// Ist eigentlich unwichtig
}
else if (EventType == XmlPullParser.START_TAG) {
// ermitteln, welches Tag hier anfängt
String xmlStartTag = xpp.getName();
if (xmlStartTag == "H-Message") { // Auswertung H-Message (Cube-Daten)
if (xmlStartTag == XML_CUBE_NAME) {
String StrCubeName = xpp.getText();
CubeCubeName = StrCubeName;
}
// weitere Daten über den Cube (noch nicht implementiert)
}
/*if (xmlStartTag == XML_C_MESSAGE) { // Auswertung C-Message (noch nicht implementiert)
}*/
if (xmlStartTag == XML_M_MESSAGE) { // Auswertung M-Message (Räume und Devices pro Raum)
if (xmlStartTag == XML_RAUM_NAME) {
tmp_CubeRaumName = xpp.getAttributeValue(0);
tmp_CubeRaumSN = Byte.parseByte(xpp.getAttributeValue(1));
}
if (xmlStartTag == XML_GERAET_NAME) {
tmp_CubeDeviceName = xpp.getAttributeValue(0);
tmp_CubeDeviceRaumId = Integer.parseInt(xpp.getAttributeValue(1));
tmp_CubeDeviceRFA = xpp.getAttributeValue(2);
tmp_CubeDeviceRFA = xpp.getAttributeValue(3);
}
}
}
else if (EventType == XmlPullParser.END_TAG) {
String xmlEndTag = xpp.getName();
if (xmlEndTag == XML_RAUM_NAME) { // den Raum in die Liste aufnehmen
cCubeRaum AktRaum = new cCubeRaum();
AktRaum.setRaumName(tmp_CubeRaumName);
AktRaum.setRaumID(tmp_CubeRaumSN);
CubeNetz.add(AktRaum);
AktRaum = null;
}
if (xmlEndTag == XML_GERAET_NAME) {
// erstmal das Device füllen
cCubeDevice AktDevice = new cCubeDevice();
AktDevice.setDeviceName(tmp_CubeDeviceName);
AktDevice.setDeviceRoomID(tmp_CubeDeviceRaumId);
AktDevice.setDeviceRFAddress(tmp_CubeDeviceRFA);
AktDevice.setDeviceSeriennummer(tmp_CubeDeviceSN);
// Jetzt anhand der RoomID den Raum finden und dort in die Device-Liste einhängen
int RaumIndex = 0;
while ((CubeNetz.get(RaumIndex).getRaumID() != tmp_CubeDeviceRaumId) &&
(RaumIndex < CubeNetz.size()) ) {
RaumIndex++;
}
cCubeRaum AktRaumForDevice = CubeNetz.get(RaumIndex);
AktRaumForDevice.GeraeteInRaum.add(AktDevice);
}
}
EventType = xpp.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Das Vorhandensein von F
ile VerwaltungsXmlDateiist vorher überprüft worden. Hinter
C
ubeNetzsteckt eine
A
rrayList,
die eine (nicht bekannte) Anzahl c
CubeRaumenthält. Jeder
c
CubeRaumwiederrum enthält u. a. eine
A
rrayListmit einer (nicht bekannten) Anzahl
c
CubeDevice.
Das ist auch gar nicht das Problem.
Das Problem:
Bei allen Abfragen, um welches Tag es sind handelt (Bsp. i
f (xmlStartTag == "H-Message")) wird der dazugehörige Anweisungsteil überhaupt nicht ausgeführt - es wird nicht erkannt, dass
x
mlStartTagaktuell wirklich den Wert "H-Message" enthält. Und das gilt für alle Abfragen. Ich habe es probiert, statt des direkten String-Vergleichs einen Vergleich mit einer vordefinierten Konstanten (hier als
s
tatic final String XML_H_MESSAGE = "H-Message";)
zu lösen, aber auch das funktioniert nicht.
Warum funktioniert das so nicht?
Hier noch die dazugehörige XML-Datei:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><H-Message><CubeName>Cube</CubeName></H-Message><M-Message><Raum Name="Wohnzimmer" SN="1"><Gerät Name="Wohnzimmer" ID="1" /></Raum><Raum Name="Schlafzimmer" SN="2"><Gerät Name="Schlafen" ID="1" /></Raum><Raum Name="Bᅢᄐro" SN="3"><Gerät Name="Bᅢᄐro" ID="1" /></Raum><Raum Name="Badezimmer" SN="4"><Gerät Name="Bad" ID="1" /></Raum><Raum Name="Gᅢᄂstezimmer" SN="5"><Gerät Name="Gᅢᄂstezimmer" ID="1" /></Raum></M-Message>
Danke und Gruss
G.-U.M.
N'y pas n'y
tu car tu
mal tu mal
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.