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 サイトの他の関連記事を参照してください。