전국 날씨 예보를 조회하는 간단한 예제이다.
xml 파싱에 대해서 공부해 보면서 만들어 봤다.
안드로이드에서는 모바일 특성상 무거운 DOM 파싱은 잘 안쓰는 것 같다.
대신 안드로이드에서는 SAX와 비슷한 XmlPullParser라는 파서를 지원한다는 것을 알았다.
이 XmlPullParser를 사용하여 간단한 날씨 정보를 파싱해서 화면에 출력해 보았다.
안드로이드 xml 파싱방법에 대한 설명
http://blog.naver.com/justsk2002/150094142053 참조
더 자세한 설명은 검색하면 많이 나오더라..ㅋ
1. XML 파일 요청
http://www.kma.go.kr/XML/weather/sfc_web_map.xml 요청 결과 (기상청에서 제공해준다)
- <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
- <current xmlns="current">
- <weather year="2010" month="11" day="18" hour="15">
<local stn_id="90" icon="01" desc="맑음" ta="11.9">속초</local>
<local stn_id="95" icon="01" desc="맑음" ta="10.4">철원</local>
<local stn_id="98" icon="01" desc="맑음" ta="11.4">동두천</local>
<local stn_id="99" icon="01" desc="맑음" ta="11.9">문산</local>
<local stn_id="100" icon="01" desc="맑음" ta="9.0">대관령</local>
<local stn_id="101" icon="01" desc="맑음" ta="10.4">춘천</local>
<local stn_id="102" icon="01" desc="맑음" ta="10.2">백령도</local>
<local stn_id="104" icon="01" desc="맑음" ta="11.8">북강릉</local>
<local stn_id="106" icon="01" desc="맑음" ta="12.7">동해</local>
<local stn_id="108" icon="01" desc="맑음" ta="11.2">서울</local>
<local stn_id="112" icon="01" desc="맑음" ta="11.7">인천</local> - .....
- .....
</weather>
</current>
2. 소스파일 (.java)
- //edtResult 전역 변수
edtResult = (EditText) findViewById(R.id.result); - Button btn = (Button) findViewById(R.id.parse);
btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
try {
URL url = new URL(
"http://www.kma.go.kr/XML/weather/sfc_web_map.xml"); - XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(url.openStream(), "utf-8"); - String Item = "";
String ItemName = "";
String ItemContents = ""; - boolean bSet = false;
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.START_TAG:
String tag = parser.getName(); - if (tag.equals("local")) {
ItemContents = "";
String state = parser.getAttributeValue(null,
"desc");
String temperature = "섭씨";
temperature += parser.getAttributeValue(null,
"ta");
temperature += "º"; - ItemContents = state + " , " + temperature
+ " ";
bSet = true;
}
break;
case XmlPullParser.END_TAG:
break;
case XmlPullParser.TEXT:
if (bSet) {
ItemName = "";
String region = parser.getText();
ItemName += region + " - ";
Item += ItemName + ItemContents;
Item += "\n";
bSet = false;
}
break;
} - eventType = parser.next();
}
edtResult.setText(Item);
} catch (Exception e) {
Toast.makeText(v.getContext(), e.getMessage(), 0).show();
}
}
});
3. 결과 화면

허접한 예제이지만 이번기회에 XML에 대해서 알게 되었다.
참고로 예제는 안드로이드 프로그래밍 정복 책에 XML 관련 예제를 기본으로
응용해서 만들어 보았다.
이 글은 스프링노트에서 작성되었습니다.




덧글