Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode für die gemeinsame Nutzung des Schleifenprozesses bei Verwendung von PULL zum Parsen von XML-Dateien

Beispielcode für die gemeinsame Nutzung des Schleifenprozesses bei Verwendung von PULL zum Parsen von XML-Dateien

黄舟
黄舟Original
2017-03-18 16:40:531796Durchsuche

XMLDer Inhalt der Datei ist wie folgt (benannt „teacher.xml“) ab3cb675d9286761e5f198592921f93d Verwenden Sie PULL, um den XML-Code der Datei zu analysieren:

import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
public class PullTry {
public static void main(String[] args) {
List datas = null;
Teacher teacher = null;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new FileReader("teacher.xml"));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagName = parser.getName();
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// 创建list
datas = new ArrayList<>();
break;
case XmlPullParser.START_TAG:
// 创建Teacher对象
if ("teacher".equals(tagName)) {
teacher = new Teacher();
} else if ("name".equals(tagName)) {
teacher.setName(parser.nextText());
} else if ("age".equals(tagName)) {
teacher.setAge(Integer.parseInt(parser.nextText()));
} else if ("money".equals(tagName)) {
teacher.setMoney(Double.parseDouble(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:
// 把对象添加进List集合中
if ("teacher".equals(tagName)) {
datas.add(teacher);
}
break;
default:
break;
}
// 将eventType指向下一步...
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < datas.size(); i++) {
System.out.println(datas.get(i));
}

System.out.println(count);
}
}

Hier sehen wir uns hauptsächlich an, wie die XML-Datei innerhalb der while-Schleife gelesen wird..

Das erste Bedingung der Schleife ist eventType != XmlPullParser

Wenn eventType nicht gleich XmlPullParser.END_DOCUMENT ist, fahren Sie mit der nächsten Schleife fort. Hier gibt es 11 eventType-Werte, es werden jedoch nur die ersten 5 verwendet.

public static final int START_DOCUMENT = 0;
public static final int END_DOCUMENT = 1;
public static final int START_TAG = 2;
public static final int END_TAG = 3;
public static final int TEXT = 4;

Um den Prozess der Schleifenausführung zu beobachten, habe ich eine Codezeile in die Schleife eingefügt:

System.out.println(eventType+"===第"+count+"次循环==="+tagName);

wobei count die Häufigkeit angibt, mit der die Schleife ausgeführt wird. Nach dem Hinzufügen dieser Codezeile zeigt die Konsole die folgenden Informationen an:

0===第1次循环===null 
2===第2次循环===teachers 
4===第3次循环===null 
2===第4次循环===teacher 
4===第5次循环===null 
2===第6次循环===name 
4===第7次循环===null 
2===第8次循环===age 
4===第9次循环===null 
2===第10次循环===money 
4===第11次循环===null 
3===第12次循环===teacher 
4===第13次循环===null 
2===第14次循环===teacher 
4===第15次循环===null 
2===第16次循环===name 
4===第17次循环===null 
2===第18次循环===age 
4===第19次循环===null 
2===第20次循环===money 
4===第21次循环===null 
3===第22次循环===teacher 
4===第23次循环===null 
3===第24次循环===teachers Teacher [name=zhangsan, age=19, money=12000.0] Teacher [name=lisi, age=23, money=8000.0] 24

Zuerst lesen Sie nur dann, wenn der nächste eventType-Wert 4 ist (d. h. TEXT wird in der nächsten Schleife gelesen). Inhalt von parser.nextText() ist nicht leer

In Kombination mit der XML-Datei können wir die Schlussfolgerung ziehen:

In der ersten Schleife ist der eventType-Wert 0, was der Fall ist START_DOCUMENT. Zu diesem Zeitpunkt ist der tagName-Wert leer.

In der zweiten Schleife ist der eventType-Wert 2, was bei START_TAG der Fall ist. Zu diesem Zeitpunkt lautet der tagName-Wert teacher. Mit anderen Worten: Das Tag wird zu diesem Zeitpunkt gelesen. Da der nächste EventType-Wert 4 ist, also TEXT, ist der parser.nextText()-Wert des diesmal gelesenen Inhalts der Textinhalt vom Etikett bis zur Mitte des Etiketts! Das heißt, ein /n plus ein /t.

In der dritten Schleife ist der eventType-Wert 4, was bei TEXT der Fall ist. Zu diesem Zeitpunkt ist der tagName-Wert leer.

Im vierten Zyklus ist der eventType-Wert 2, was bei START_TAG der Fall ist. Zu diesem Zeitpunkt lautet der tagName-Wert teacher. Mit anderen Worten: Das Tag wird zu diesem Zeitpunkt gelesen. Hinweis: Zu diesem Zeitpunkt stellt die if-Anweisung fest, dass der Rückgabewert von „teacher“.equals(tagName) wahr ist, und der folgende Befehl teacher = new Teacher(); wird ausgeführt, um ein Objekt der Teacher-Klasse zu erstellen. Da der nächste EventType-Wert 4 ist, also TEXT, ist der parser.nextText()-Wert des diesmal gelesenen Inhalts der Textinhalt von der Beschriftung bis zur Mitte der Beschriftung, also eins /n plus zwei /t.

In der fünften Schleife ist der eventType-Wert 4, was bei TEXT der Fall ist. Zu diesem Zeitpunkt ist der tagName-Wert leer.

Im sechsten Zyklus ist der eventType-Wert 2, was bei START_TAG der Fall ist. Zu diesem Zeitpunkt ist der tagName-Wert name. Mit anderen Worten: Das Tag wird zu diesem Zeitpunkt gelesen. Hinweis: Zu diesem Zeitpunkt stellt die if-Anweisung fest, dass der Rückgabewert von „name“.equals(tagName) wahr ist, und der folgende Wert teacher.setName(parser.nextText()); () hier sollte zhangsan sein. Auf diese Weise wird Zhangsan dem Namens Attribut des Lehrerobjekts zugewiesen.

Im siebten Zyklus beträgt der eventType-Wert 4, was bei TEXT der Fall ist. Zu diesem Zeitpunkt ist der tagName-Wert leer.

Es scheint nicht nötig zu sein, noch etwas zu sagen, es bedeutet alles dasselbe.

ps: Jedes Mal, wenn ein Teacher-Tag angetroffen wird (Teacher-Tag ist ein untergeordnetes Tag, Teachers ist ein übergeordnetes Tag), wird ein Objekt erstellt und dann die Enkel-Tags (Name, Alter und Geld). ) wird den Eigenschaften dieses Objekts zugewiesen.

ps2: In diesem Beispiel wird der Endtag im Enkel-Tag nicht gelesen. (Das ist es...)

xbox: Es gibt nur drei Fälle, in denen der eventType-Wert 3 ist. In diesen drei Fällen lauten die tagName-Werte teacher, teacher bzw. teacher. Es beweist weiter, dass PS2 Recht hat....

Das obige ist der detaillierte Inhalt vonBeispielcode für die gemeinsame Nutzung des Schleifenprozesses bei Verwendung von PULL zum Parsen von XML-Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn