I'm trying to parse this XML, but I can only load one entry (19.12.2011 obed polevka1 Zeleninová 7,00 16,00). Entry should look like [date][meal][type][name][price_student][price_other] Thanks for ideas!
XML example:
<?xml version="1.0" encoding="utf-8"?>
<jidelnicek>
<den>
<datum>19.12.2011</datum>
<obed>
<polevka1>
<nazev>Zeleninová</nazev>
<cena_student>7,00</cena_student>
<cena_ostatni>16,00</cena_ostatni>
</polevka1>
<polevka2>
<nazev>Krupicová</nazev>
<cena_student>5,00</cena_student>
<cena_ostatni>11,00</cena_ostatni>
</polevka2>
<stdjidlo1>
<nazev>Uzená krkovička, dušený špenát, bramborový knedlík</nazev>
<cena_student>37,00</cena_student>
<cena_ostatni>77,00</cena_ostatni>
</stdjidlo1>
<stdjidlo2>
<nazev>Ďábelský guláš, houskový knedlík</nazev>
<cena_student>36,00</cena_student>
<cena_ostatni>76,00</cena_ostatni>
</stdjidlo2>
<stdjidlo3>
<nazev>Vepřová kýta na slanině, dušená rýže</nazev>
<cena_student>30,00</cena_student>
<cena_ostatni>70,00</cena_ostatni>
</stdjidlo3>
<bezmjidlo>
<nazev>Gratinované těstoviny s kuřecím masem a houbovou omáčkou</nazev>
<cena_student>30,00</cena_student>
<cena_ostatni>70,00</cena_ostatni>
</bezmjidlo>
<sladkejidlo>
<nazev>Palačinky s džemem, jahodami a šlehačkou</nazev>
<cena_student>29,00</cena_student>
<cena_ostatni>59,00</cena_ostatni>
</sladkejidlo>
<specialita1>
<nazev>Kuřecí paličky po Mexicku, jasmínová rýže</nazev>
<cena_student>44,00</cena_student>
<cena_ostatni>84,00</cena_ostatni>
</specialita1>
<specialita2>
<nazev>Vepřová kýta se švestkovou omáčkou, houskový knedlík</nazev>
<cena_student>31,00</cena_student>
<cena_ostatni>71,00</cena_ostatni>
</specialita2>
<salat>
<nazev>Cesar salát s kousky mozzarelly</nazev>
<cena_student>36,00</cena_student>
<cena_ostatni>76,00</cena_ostatni>
</salat>
</obed>
<vecere>
<polevka1>
<nazev>Houbová hnědá</nazev>
<cena_student>7,00</cena_student>
<cena_ostatni>14,00</cena_ostatni>
</polevka1>
<polevka2>
<nazev>Česnečka s bramborem</nazev>
<cena_student>5,00</cena_student>
<cena_ostatni>11,00</cena_ostatni>
</polevka2>
<stdjidlo1>
<nazev>Srbský vepřový plátek, houskový knedlík</nazev>
<cena_student>31,00</cena_student>
<cena_ostatni>71,00</cena_ostatni>
</stdjidlo1>
<stdjidlo2>
<nazev>Kuřecí perkelt dušená rýže</nazev>
<cena_student>31,00</cena_student>
<cena_ostatni>71,00</cena_ostatni>
</stdjidlo2>
<stdjidlo3>
<nazev>Těstoviny s rajskou omáčkou a sýrem</nazev>
<cena_student>22,00</cena_student>
<cena_ostatni>62,00</cena_ostatni>
</stdjidlo3>
<bezmjidlo>
<nazev>Variace listových salátů s kuřecími nugetkami</nazev>
<cena_student>30,00</cena_student>
<cena_ostatni>70,00</cena_ostatni>
</bezmjidlo>
</vecere>
</den>
</jidelnicek>
and my parser, whis is based on developer.andoid code
package com.example.android.networkusage;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class StackOverflowXmlParser {
private static final String ns = null;
public List<Entry> parse(InputStream in) throws XmlPullParserException, IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}
private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, ns, "jidelnicek");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("den")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
public static class Entry {
public final String date;
public final String meal;
public final String type;
public final String name;
public final String price_student;
public final String price_other;
private Entry(String date, String meal, String type, String name, String price_student, String price_other) {
this.date = date;
this.meal = meal;
this.type = type;
this.name = name;
this.price_student = price_student;
this.price_other = price_other;
}
}
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "den");
String date = null;
String meal = null;
String type = null;
String name = null;
String price_student = null;
String price_other = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String sname = parser.getName();
if (sname.equals("datum")) {
date = readDate(parser);
} else if ((sname.equals("obed"))||(sname.equals("vecere"))) {
meal = sname;
} else if ((sname.equals("polevka1"))||(sname.equals("polevka2"))
||(sname.equals("stdjidlo1"))||(sname.equals("stdjidlo2"))||(sname.equals("stdjidlo3"))
||(sname.equals("bezmjidlo"))
||(sname.equals("sladkejidlo"))
||(sname.equals("specialita1"))
||(sname.equals("specialita2"))
||(sname.equals("salat"))
) {
type = sname;
} else if (sname.equals("nazev")) {
name = readName(parser);
} else if (sname.equals("cena_student")) {
price_student = readPrice_student(parser);
} else if (sname.equals("cena_ostatni")) {
price_other = readPrice_other(parser);
}
else {
skip(parser);
}
}
return new Entry(date, meal, type, name, price_student, price_other);
}
private String readDate(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "datum");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "datum");
return title;
}
private String readName(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "nazev");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "nazev");
return title;
}
private String readPrice_student(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "cena_student");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "cena_student");
return title;
}
private String readPrice_other(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "cena_ostatni");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "cena_ostatni");
return title;
}
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
}
In your readEntry function, your while loop must iterate while no END_DOCUMENT.
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
// ...
while (parser.next() != XmlPullParser.END_DOCUMENT) {
// ...
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.