в андроид приложение, я получил следующий XML в результате XMLSerializer:O: Android XmlPullParser не может обрабатывать XML-файл (находками только StartDocument)
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><Network><Cubes><Cube CubeName="null" CubeRF="0cd86d" CubeSN="EQ0837268" /></Cubes><Raeume><Raum RaumName="Wohnzimmer" RaumID="1" RaumRF="b715a" /><Raum RaumName="Schlafzimmer" RaumID="2" RaumRF="b7a40" /><Raum RaumName="Bᅢᄐro" RaumID="3" RaumRF="b7128" /><Raum RaumName="Badezimmer" RaumID="4" RaumRF="b6e0b" /><Raum RaumName="Gᅢᄂstezimmer" RaumID="5" RaumRF="b602f" /></Raeume><Devices><Thermostat DevName="Schlafen" DevRF="b7a40" DevType="1" DevSer="KEQ0446747" DevRaumID="2" /><Thermostat DevName="Bᅢᄐro" DevRF="b7128" DevType="1" DevSer="KEQ0449549" DevRaumID="3" /><Thermostat DevName="Bad" DevRF="b6e0b" DevType="1" DevSer="KEQ0446180" DevRaumID="4" /><Thermostat DevName="Wohnzimmer" DevRF="b715a" DevType="1" DevSer="KEQ0449570" DevRaumID="1" /><Thermostat DevName="Gᅢᄂstezimmer" DevRF="b602f" DevType="1" DevSer="KEQ0450567" DevRaumID="5" /></Devices></Network>
(не редактируется впоследствии) Но когда я хочу, чтобы обработать это с XmlPullParser, eventType всегда остается 0 - ищет меня, что XmlPullParser не распознает какой-либо другой тег.
код я использую для обработки (как я немецкий, я использовать немецкие имена функций):
public void ladeXmlDatenInCubeNetz(String xmlDatenDateiName) {
String xmlDatenString = null;
try {
FileInputStream xmlDateiInput = new FileInputStream(new File(Environment.getExternalStorageDirectory().getPath()+"/ccdat.xml"));
InputStreamReader xmlInputStreamReader = new InputStreamReader(xmlDateiInput);
char[] EingabePuffer = new char[xmlDateiInput.available()];
xmlInputStreamReader.read(EingabePuffer);
xmlDatenString = new String(EingabePuffer);
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(xmlDatenString));
int eventType = xpp.getEventType();
cDevice4 cd = new cDevice4();
CubeNetz.clear();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equals("Cube")) {
cd.setDeviceTypeSelector(0);
cd.setCubeCubeName(xpp.getAttributeValue("", "CubeName"));
cd.setCubeCubeRFAddress(xpp.getAttributeValue("", "CubeRF"));
cd.setCubeCubeSerialNumber(xpp.getAttributeValue("", "CubeSN"));
CubeNetz.add(cd);
} else if (xpp.getName().equals("Raum")) {
cd.setDeviceTypeSelector(1);
cd.setRaumName(xpp.getAttributeValue("", "RaumName"));
String rid = xpp.getAttributeValue("", "RaumID");
cd.setRaumID(Byte.valueOf(rid));
String aktRaumRF = xpp.getAttributeValue("", "RaumRF");
CubeNetz.add(cd);
} else if (xpp.getName().equals("Thermostat")) {
cd.setDeviceTypeSelector(2);
cd.setDeviceName(xpp.getAttributeValue("", "DevName"));
cd.setDeviceRFAddress(xpp.getAttributeValue("", "DevRF"));
cd.setDeviceSeriennummer(xpp.getAttributeValue("", "DevSer"));
cd.setDeviceRoomID(Integer.valueOf(xpp.getAttributeValue("", "DevRaumID")));
CubeNetz.add(cd);
}
}
}
try {
xpp.next();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
xmlInputStreamReader.close();
xmlDateiInput.close();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Класс cDevice4 содержит реализацию для доступа к MaxCube-System ELV (контроль отопления).
Я проверил Xml-файл с помощью некоторых онлайн-валидаторов, и это кажется правильным. Итак, где я должен изменить свой код, чтобы обработать этот файл? Заранее спасибо GU_Meyer
пользователь java-json.jar для преобразования xml в json – Pavya
Насколько я понимаю, что было бы проще использовать json? Но должно быть возможно прочитать xml-файл с помощью xmlPullparser, даже если файл сгенерирован xmlSerializer (оба указаны для Android). –
Решенный! Изменение кода на следующее: прочитайте файл правильно: –