0
我想解析这个XML,但我只能加载一个条目(19.12.2011 obed polevka1Zeleninová7,00 16,00)。 条目应该看起来像[日期] [餐食] [类型] [名称] [price_student] [price_other] 感谢您的想法!用XmlPullParser解析xml
XML例如:
<?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>
和我的解析器,WHIS基于developer.andoid代码
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;
}
}
}
}
非常感谢你!这不是在**“私人资金进入readEntry(XmlPullParser解析器)” **,但**“私人列表 readFeed(XmlPullParser解析器)” **是准确 –
Ofer
是!对不起,我在复制粘贴时犯了一个错误;) – David
我试图更改我的代码,所以它可以每天加载超过条目,但没有任何成功。有关于此的任何想法? –
Ofer