공공데이터 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;


    }


+ Recent posts