공공데이터 API를 http request로 호출하였는데 반환형식이 xml 이었다.
내가 이니 만든 request 공통 모듈은 반환형식을 string 으로 받고 있었기 때문에
xml 이 그냥 쭉 스트링으로 저장되어 반환되었다.
string 으로 된 xml 을 파싱하려고하니 불편할것 같아서
string 을 xml에 다시 담은 뒤 xml을 파싱하려고 한다.
////////////////////////////////////////////////
//string -> xml
//string을 xml로 바꾸어 넣을 곳
XmlPullParser parser = Xml.newPullParser();
try {
// http request 후 xml을 스트링값으로 받는 부분
data = new JOAsyncTask().execute().get();
//스트링을 다시 xml로
parser.setInput(new StringReader(data));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (XmlPullParserException e){
e.printStackTrace();
}
return parser;
///////////////////////////////////////////////////
//xml 의 형태
<?xml version="1.0" encoding="UTF-8"?>
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<RNUM>1</RNUM>
<CTGR_ID>10000</CTGR_ID>
<CTGR_NM>부동산</CTGR_NM>
<CTGR_HIRK_ID>1</CTGR_HIRK_ID>
<CTGR_HIRK_NM>ONBID</CTGR_HIRK_NM>
</item>
<item>
<RNUM>2</RNUM>
<CTGR_ID>11000</CTGR_ID>
<CTGR_NM>권리/증권</CTGR_NM>
<CTGR_HIRK_ID>1</CTGR_HIRK_ID>
<CTGR_HIRK_NM>ONBID</CTGR_HIRK_NM>
</item>
<item>
<RNUM>3</RNUM>
<CTGR_ID>12000</CTGR_ID>
<CTGR_NM>자동차/운송장비</CTGR_NM>
<CTGR_HIRK_ID>1</CTGR_HIRK_ID>
<CTGR_HIRK_NM>ONBID</CTGR_HIRK_NM>
</item>
</items>
<pageNo>1</pageNo>
<totalCount>22</totalCount>
<numOfRows>999</numOfRows>
</body>
</response>
//////////////////////////////////////////////////
//xml 파싱
public ArrayList<UseCodeTop> xmlData(XmlPullParser parser){
ArrayList<UseCodeTop> list = new ArrayList<>();
try {
int eventType = parser.getEventType();
UseCodeTop data = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
String startTag = parser.getName();
if ("item".equals(startTag)) {
data = new UseCodeTop();
} else if ("RNUM".equals(startTag)) {
data.setRNUM(parser.nextText());
} else if ("CTGR_ID".equals(startTag)) {
data.setCTGR_ID(parser.nextText());
} else if ("CTGR_NM".equals(startTag)) {
data.setCTGR_NM(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
String endTag = parser.getName();
if ("item".equals(endTag)) {
list.add(data);
}
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.d("UseCodeTop_CNT", list.size() +"");
//데이터 확인용
/*Iterator<UseCodeTop> iterator = list.iterator();
while (iterator.hasNext()) {
UseCodeTop tmp = (UseCodeTop) iterator.next();
Log.d("hohoho", tmp.getCTGR_NM().toString());
}*/
return list;
}
'공부 > Android' 카테고리의 다른 글
(android) 키보드 내리기 (0) | 2016.11.07 |
---|---|
(android) 키보드 올라올 때 버튼도 같이 올라오는 현상 (0) | 2016.11.07 |
(공공데이터 API) SERVICE_KEY_IS_NOT_REGISTERED_ERROR (1) | 2016.10.22 |
(android) this.finish() 액티비티 종료시 (0) | 2016.09.05 |
(android) 앱 종료 (액티비티 하나만 남겨놓기) (0) | 2016.07.27 |