ホームページ  >  記事  >  バックエンド開発  >  PULL を使用して XML ファイルを解析する場合のループ処理のサンプル コード共有

PULL を使用して XML ファイルを解析する場合のループ処理のサンプル コード共有

黄舟
黄舟オリジナル
2017-03-18 16:40:531813ブラウズ

XML ファイルの内容は次のとおりです (「Teacher.xml」という名前) cc2a3c708791b3c626d2b5fe40691168 zhangsan 1912000 lisi 23 8000 PULL を使用して解析するためのコードXML ファイル:

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);
}
}

ここでは主に、while ループ内で XML ファイルがどのように読み取られるかを見ていきます

最初のループ条件は、eventType !=ここには 11 個のeventType 値がありますが、最初の 5 個だけが使用されます。

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;

ループの実行プロセスを観察するために、ループ内に次のコード行を追加しました。

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

ここで、count はループの実行回数です。このコード行を追加すると、コンソールに次の情報が表示されます:

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

まず、次のeventType値が4の場合(つまり、TEXTが次のループで読み取られる場合)のみ、読み取られたコンテンツparser.nextText()は空ではありません

XML ファイルと組み合わせると、次の結論を導き出すことができます:

最初のサイクルでは、eventType 値は 0 であり、これは START_DOCUMENT の場合です。この時点では、tagName 値は空です。

2 番目のループでは、eventType 値は 2 であり、START_TAG の場合です。このとき、tagName の値は Teacher です。つまり、この時点でタグが読み取られます。次のeventTypeの値はTEXTの4なので、今回読み込んだ内容のparser.nextText()の値はラベルからラベルの途中までのテキスト内容になります!つまり、/n に /t を加えたものです。

3 番目のループでは、eventType 値は 4 であり、TEXT の場合です。この時点では、tagName 値は空です。

4 番目のサイクルでは、eventType 値は 2 であり、START_TAG の場合です。このとき、tagName の値は Teacher です。つまり、この時点でタグが読み取られます。注: このとき、if ステートメントは "Teacher".equals(tagName) の戻り値が true であると判断し、次の Teacher = new Teacher(); が実行されて Teacher クラスのオブジェクトが作成されます。次のeventType値はTEXTである4であるため、今回読み取られるコンテンツのparser.nextText()値は、ラベルからラベルの途中までのテキストコンテンツ、つまり/nの1つと/tの2つになります。

5 番目のループでは、eventType 値は 4 であり、TEXT の場合です。この時点では、tagName 値は空です。

6 番目のサイクルでは、eventType 値は 2 であり、START_TAG の場合です。このとき、tagNameの値はnameになります。つまり、この時点でタグが読み取られます。注: このとき、if ステートメントで "name".equals(tagName) の戻り値が true と判断された場合、次の Teacher.setName(parser.nextText()); の値が実行されます。 ()ここは張三でなければなりません。このようにして、この教師オブジェクトの名前

属性

にzhangsanが割り当てられます。

7 番目のサイクルでは、eventType 値は 4 であり、TEXT の場合です。この時点では、tagName 値は空です。

他に何も言う必要はないようですが、すべて同じ意味です。

追記: Teacher タグが見つかるたびに (Teacher タグは子タグ、Teachers は親タグ)、オブジェクトが作成され

、その中の孫タグ (名前、年齢、お金) が割り当てられます。このオブジェクトの中央の属性。

ps2: この例では、孫タグ内の終了タグは読み取られません。 (それだけです...) xbox:eventType 値が 3 であるケースは 3 つだけです。これら 3 つのケースでは、tagName 値はそれぞれ Teacher、Teacher、Teachers です。これは、ps2 が正しいことをさらに証明します...

以上がPULL を使用して XML ファイルを解析する場合のループ処理のサンプル コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。