我試圖解析這樣的XML文件:Android的XML解析停在第一個孩子
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cartoonia xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<stagione nome="Cartoonia Speciale due per vedere se funziona">
<puntata>
<numero>0</numero>
<titolo>Ciao Cipo</titolo>
<link>http://www.dimaleinpentium.com/app/download/5429764359/Cartoonia+%288%5E+Puntata%29.mp3?t=1389213968</link>
<descrizione>Ma ciao mia bella Cipo</descrizione>
</puntata>
</stagione>
<stagione nome="Stagione 1">
<puntata>
<numero>1</numero>
<titolo>Puntata 1</titolo>
<link>http://www.dimaleinpentium.com/app/download/5424302459/Cartoonia+1%5E+Puntata.mp3?t=1383736417</link>
<descrizione>Descrizione</descrizione>
</puntata>
<puntata>
<numero>2</numero>
<titolo>Puntata 2</titolo>
<link>http://www.dimaleinpentium.com/app/download/5425828359/Cartoonia+%282%5E+Puntata%29.mp3?t=1384351442</link>
<descrizione>Descrizione</descrizione>
</puntata>
<puntata>
<numero>3</numero>
<titolo>Puntata 3</titolo>
<link>http://www.dimaleinpentium.com/app/download/5427087659/Cartoonia+%283%5E+Puntata%29.mp3?t=1384981673</link>
<descrizione>Descrizione Puntata</descrizione>
</puntata>
</stagione>
<stagione nome="Cartoonia Special!">
<puntata>
<numero>0</numero>
<titolo>Ciao Cipo</titolo>
<link>http://www.dimaleinpentium.com/app/download/5429764359/Cartoonia+%288%5E+Puntata%29.mp3?t=1389213968</link>
<descrizione>Ma ciao mia bella Cipo</descrizione>
</puntata>
</stagione>
</cartoonia>
有了這個代碼(由AndroidDevs採取和修改,以適應我的文件),我只能讀取第一<stagione>
,其他人被忽略。
public Map < String, 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 Map < String, List <Entry>> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
Map < String, List <Entry>> entries = new HashMap < String, List <Entry>>();
String index = "";
parser.require(XmlPullParser.START_TAG, ns, "cartoonia");
while (parser.next() != XmlPullParser.END_TAG) {
Log.d(TAG, "> " + parser.getLineNumber() + " <");
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.d(TAG, "" + name);
if (name.equals("stagione")) {
index = parser.getAttributeValue(null, "nome");
Log.d(TAG, " " + index);
entries.put(index, new ArrayList <Entry>());
} else if (name.equals("puntata")) {
Log.d(TAG, " Entry: " + parser.getName());
List <Entry> en = entries.get(index);
en.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
// Parses the contents of an entry. If it encounters a title, summary, or link tag, hands them off
// to their respective "read" methods for processing. Otherwise, skips the tag.
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "puntata");
String title = null;
String summary = null;
String link = null;
String number = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("titolo")) {
title = readTitle(parser);
} else if (name.equals("numero")) {
number = readNumber(parser);
} else if (name.equals("descrizione")) {
summary = readSummary(parser);
} else if (name.equals("link")) {
link = readLink(parser);
} else {
skip(parser);
}
}
return new Entry(title, number, summary, link);
}
沒有顯示錯誤或警告或例外。如果我更改<stagione>
的順序,我會得到相同的結果,所以我不認爲這是文件的問題。
不是一個大文件。請嘗試使用調試器。 – danny117
這似乎是一個邏輯問題,而不是一個語法錯誤......在這種情況下調試有用嗎? –
你打賭調試將有所幫助。這是您幾分鐘內完成的一個小文件。 – danny117