XML파일 내용은 다음과 같습니다(이름: "teacher.xml") 3b9fa87c98f5c55818a33d8f635304a4 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 파일을 읽는 방법을 살펴봅니다..
첫 번째 루프 조건 is eventType != XmlPullParser.END_DOCUMENT
eventType이 XmlPullParser.END_DOCUMENT와 같지 않으면 다음 루프로 진행합니다. 여기에는 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를 읽는 경우)에만 읽기 콘텐츠 파서가 .nextText()는 비어 있지 않습니다
xml 파일과 결합하면 다음과 같은 결론을 내릴 수 있습니다.
첫 번째 루프에서 eventType 값은 0이며 이는 START_DOCUMENT의 경우입니다. 현재 tagName 값은 비어 있습니다.
두 번째 루프에서 eventType 값은 2이며 이는 START_TAG의 경우입니다. 이때 tagName 값은 Teacher 입니다. 즉, 이때 태그를 읽는다. 다음 eventType 값은 4, 즉 TEXT이므로 이번에 읽은 내용의 parser.nextText() 값은 라벨부터 라벨 중간까지의 텍스트 내용입니다! 즉, /n에 /t를 더한 것입니다.
세 번째 루프에서 eventType 값은 TEXT의 경우인 4입니다. 현재 tagName 값은 비어 있습니다.
네 번째 주기에서는 eventType 값이 2로 START_TAG의 경우입니다. 이때 tagName 값은 Teacher 입니다. 즉, 이때 태그를 읽는다. 참고: 이때 if 문은 "teacher".equals(tagName)의 반환 값이 true라고 판단하고, Teacher = new Teacher();가 실행되어 Teacher 클래스의 객체를 생성합니다. 다음 eventType 값이 4, 즉 TEXT이므로 이번에 읽은 내용의 parser.nextText() 값은 레이블부터 레이블 중간까지의 텍스트 내용, 즉 1 /n 더하기 2 /t가 됩니다.
다섯 번째 루프에서 eventType 값은 TEXT의 경우인 4입니다. 현재 tagName 값은 비어 있습니다.
6번째 주기에서는 eventType 값이 2로 START_TAG의 경우입니다. 이때 tagName 값은 name 입니다. 즉, 이때 태그를 읽는다. 참고: 이때 if 문에서 "name".equals(tagName)의 반환 값이 true라고 판단하면 다음 Teacher.setName(parser.nextText());가 실행됩니다. ()여기는 장산이 있어야 합니다. 이런 식으로, 교사 개체의 이름속성에 zhangsan이 할당됩니다.
7번째 사이클에서는 eventType 값이 4로 TEXT의 경우입니다. 현재 tagName 값은 비어 있습니다.
더 이상 말이 필요 없을 것 같습니다. 모두 같은 의미입니다.
ps: Teacher 태그가 발견될 때마다(Teacher 태그는 하위 태그, Teachers는 상위 태그) 개체 가 생성된 다음 손자 태그(이름, 나이 및 돈)가 생성됩니다. )이 이 개체의 속성에 할당됩니다.
ps2: 이 예에서는 손자 태그의 종료 태그를 읽지 않습니다. (이게 다...) xbox: eventType 값이 3인 경우는 3가지뿐입니다. 이 3가지 경우 tagName 값은 각각 Teacher, Teacher, Teacher 입니다. ps2가 옳았다는 것이 더욱 입증되었습니다....위 내용은 PULL을 사용하여 XML 파일을 구문 분석할 때 루프 프로세스의 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!