이번 포스팅은 xmlpullparser로
어떻게 xml 파싱을 해오는지에 대해서 설명하도록 하겠습니다.
소스 보실때 제가 지금 바로 밑에첨부해놓은 xml 구조 보면서 이해하세요^^

try {
URL text = new URL(url);
XmlPullParserFactory parserCreator = XmlPullParserFactory //xmlpullparser객체를 생성하기위해 팩토리클래스의
.newInstance(); //newinstance메소드를 이용하여 newpullparset메소드를 통해 객체를 얻어온다
//xml 파싱하기 위해서 풀 파서 쓴다.
XmlPullParser parser = parserCreator.newPullParser(); // XMLPullParser 사용
parser.setInput(text.openStream(), null); // 파싱하기위해서 스트림을 열어야한다.
int parserEvent = parser.getEventType(); // 파싱할 데이터의 타입을 알려준다.
String tag;
boolean inTitle = false, inTitle2 = false, inTitle3 = false, inTitle4 = false, inTitle5 = false;
while (parserEvent != XmlPullParser.END_DOCUMENT) { // xml 파일의 문서 끝인가?
switch (parserEvent) {
`
case XmlPullParser.TEXT: // xml의 젤왼쪽위에서부터 파싱을시작한다고하면 이 파싱하는부분이 태그안의 값인지 검사하는 case 문입니다. 물론 젤처음은 start Tag 이기때문에 이건 두번째로 실행되겠죠^^
tag = parser.getName();
if (inTitle) { // StartTag에서 inTitle을 true로 변경시켜줬기때문에 실행됩니다^^
String max = parser.getText(); // 태그안의값을 가져옵니다.
nickname.add(max); // 파싱한 값 ArrayList 객체에 추가(밑에도 마찬가지)
} else if (inTitle2) {
String max = parser.getText();
clearnumber.add(max);
} else if (inTitle3) {
String max = parser.getText();
comment.add(max);
} else if (inTitle4){
String max = parser.getText();
date.add(max);
} else if (inTitle5){
String max = parser.getText();
phone.add(max);
}
break;
case XmlPullParser.END_TAG: // 이부분은 </nick> 여기라고 생각하시면됩니다. (END_TAG)
tag = parser.getName();
if (tag.compareTo("nick") == 0) {
inTitle = false; // 다시 inTitle을 false로 바꿔줍니다. (Text에 값을 다시넣는것을 방지하기 위해서)
} else if (tag.compareTo("cnum") == 0) { // 맞춘수
inTitle2 = false;
} else if (tag.compareTo("comment") == 0) { // 하고싶은말
inTitle3 = false;
} else if (tag.compareTo("date") == 0) {
inTitle4 = false;
} else if (tag.compareTo("phone") == 0) {
inTitle5 = false;
}
break;
case XmlPullParser.START_TAG: // <nick> 이런식으로 시작태그인지 확인을 합니다. 시작태그면 실행.
tag = parser.getName();
if (tag.compareTo("nick") == 0) { // 태그가 nick 인지 검사, 맞으면 true
inTitle = true;
} else if (tag.compareTo("cnum") == 0) {
inTitle2 = true;
} else if (tag.compareTo("comment") == 0) {
inTitle3 = true;
} else if (tag.compareTo("date") == 0) {
inTitle4 = true;
} else if (tag.compareTo("phone") == 0) {
inTitle5 = true;
}
break;
}
parserEvent = parser.next();
}
} catch (Exception e) {
Log.e("dd", "Error in network call", e);
}
결국 이런식으로 파싱을 통해서 ArrayList의 객체(nickname, comment) 등에 값이 차례대로 들어가게 됩니다^^
[출처] xml 파싱 XmlPullParser 분석|작성자 JungSungjun
'[연구]Android' 카테고리의 다른 글
| XmlPullParser (0) | 2012/05/11 |
|---|---|
| 텔레파시 개시! SVN 버젼관리도구. (0) | 2012/02/12 |
| 안드로이드 블루투스 통신 스킬 찍고 있습니다~. (0) | 2012/02/09 |