package exam.Parser;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.InputStream;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.R;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class Parser extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(exam.Parser.R.layout.main);
TextView textview = (TextView)findViewById(exam.Parser.R.id.TextView01);
String stdid = null;
String desc = null;
String ta = null;
String region = null;
try {
URL text = new URL(
"http://www.kma.go.kr/XML/weather/sfc_web_map.xml");
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
// ↑ 퍼서펙토리(공장이름만 만들었지 실질적인 공장은 없음)
XmlPullParser parser = parserCreator.newPullParser();
// ↑ Parser 생성.
parser.setInput(text.openStream(), "utf-8");
// ↑ 쉽게 생각해서 연결 모드.
int ParserEvent = parser.getEventType();
/*Start_Document,START_TAG, TEXT,END_TAG 는 숫자가 정해져 있다.
ParserEvent 는 초기값이 0으로 시작해서 case 문에 조건에 있는 값에 따라 변한다.
Ex) TEXT = 4 END_TAG = 3
*/
String tag ="reday!";//tag 값에는 처음 에 ready 를 집어 넣음 (초기화)
while (ParserEvent != XmlPullParser.END_DOCUMENT) {
// ↑ XmlPullParser는 문서의 다음 사건을 돌려주는 메소드 (끝날떄까지 계속 돌아라)
switch (ParserEvent) {
case XmlPullParser.START_DOCUMENT:
//Log.d("parserTest", "parser start..!");
break;
case XmlPullParser.START_TAG:
tag = parser.getName(); //Xml 태그 안에 있는 값들을 tag에 저장함. ex)current,weather
if (tag.equals("local")) { //local 을 기점으로 파싱 데이터 추출
stdid = parser.getAttributeValue(null, "stn_id");
desc = parser.getAttributeValue(null, "desc");
ta = parser.getAttributeValue(null, "ta");
//Log.d("parserTest", stdid + " : " + desc + " : " + ta + " :");
}
break;
case XmlPullParser.TEXT:
if(tag.equals("local")){
region = parser.getText();
//Log.d("parserTest", region);
//if(region.equals("속초")){
//Log.d("parserTest","ddddddddddddddddd");
//}
}
case XmlPullParser.END_TAG : //tag 값에 계속 lacal이 있으면 예외처리 나니까 태그가 끈나버리면 다른 스트링으로 변경
tag = "nothing";
break;
}
//Log.d("RESULT", region +","+ stdid+","+desc+","+ta);
ParserEvent = parser.next(); //다음 한칸씩 이동.
if(region == null)
{
}else{
Log.d("rrrrrrrrrrrrrrrrr", region +"," + stdid +"," + desc +"," + ta +"\n");
textview.setText(region + "," + stdid + "," + desc + "," + ta + "\n"); //출력부분!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
먼저 인사부터 드릴꼐요.
안녕하세요 안드로이드 공부를 시작한지 얼마 안된 학생입니다.
이것저것 부딛히며 Xml 파싱을 하긴 했는데요 출력을 모두 출력 하고 싶은데
결국 마지막 부분밖에 출력이 안되네요
파싱데이터 10개가 있다면 10개 다 정보를 보고 싶은데 결국 마지막 데이터인 값만 출력이 되는데
이걸 어떻게 해서 전부 출력을 시키는지 잘 이해가 되질 않습니다..
TextView에 setText를 하게되면, 기존에 출력된 내용이 전부 지워집니다.
그러므로 이전의 Text를 가져온뒤에 + 를 시켜서 추가시킬 내용을 넣어야하는것이죠
즉,
textview.setText(textview.getText() + "\n" + region + "," + stdid + "," + desc + "," + ta + "\n");
이렇게 하셔야할듯 합니다.
이클립스가없어서 동작여부는 불투명하지만
저런식으로 하심됩니다.