>  기사  >  백엔드 개발  >  PULL을 사용하여 XML 파일을 구문 분석할 때 루프 프로세스의 샘플 코드 공유

PULL을 사용하여 XML 파일을 구문 분석할 때 루프 프로세스의 샘플 코드 공유

黄舟
黄舟원래의
2017-03-18 16:40:531799검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.