ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XML 형식의 데이터 파싱, 검색기능 구현
    Java/Android Studio 2021. 7. 17. 23:06

    데이터를 파싱하기 위해 데이터 애트리뷰트에 맞게 커스텀 클래스를 만든다.

     

    데이터 상세설명에 가면 필드를 확인할 수 있다.

    결과코드 resultCode 2 필수 00 결과코드
    암호화된 요양기호 ykiho 400 필수 {생략} {생략}
    병원명 yadmNm 150 옵션 서울특별시서울의료원 병원명
    종별코드 clCd 2 옵션 11 종별코드
    종별코드명 clCdNm 150 옵션 종합병원 종별코드명
    시도코드 sidoCd 6 옵션 110000 시도코드
    시도명 sidoCdNm 150 옵션 서울 시도명
    시군구코드 sgguCd 6 옵션 110019 시군구코드
    시군구명 sgguCdNm 150 옵션 중랑구 시군구명
    읍면동명 emdongNm 150 옵션 신내동 읍면동명
    우편번호 postNo 6 옵션 02053 우편번호
    주소 addr 500 옵션 서울특별시 중랑구 신내로 156 (신내동) 주소
    전화번호 telno 30 옵션 02-2276-7000 전화번호
    홈페이지 hospUrl 500 옵션 http://www.seoulmc.or.kr 홈페이지
    개설일자 estbDd 8 옵션 20110314 개설일자
    의사총수 drTotCnt 14 옵션 227 의사총수
    의과일반의 인원수 mdeptGdrCnt 22 옵션 0 의과일반의 인원수
    의과인턴 인원수 mdeptIntnCnt 22 옵션 28 의과인턴 인원수
    의과레지던트 인원수 mdeptResdntCnt 22 옵션 64 의과레지던트 인원수
    의과전문의 인원수 mdeptSdrCnt 22 옵션 131 의과전문의 인원수
    치과일반의 인원수 detyGdrCnt 22 옵션 1 치과일반의 인원수
    치과인턴 인원수 detyIntnCnt 22 옵션 0 치과인턴 인원수
    치과레지던트 인원수 detyResdntCnt 22 옵션 0 치과레지던트 인원수
    치과전문의 인원수 detySdrCnt 22 옵션 2 치과전문의 인원수
    한방일반의 인원수 cmdcGdrCnt 22 옵션 1 한방일반의 인원수
    한방인턴 인원수 cmdcIntnCnt 22 옵션 0 한방인턴 인원수
    한방레지던트 인원수 cmdcResdntCnt 22 옵션 0 한방레지던트 인원수
    한방전문의 인원수 cmdcSdrCnt 22 옵션 0 한방전문의 인원수
    x좌표 XPos 18 옵션 127.09854004628151 x좌표(소수점 13)
    y좌표 YPos 18 옵션 37.6132113197367 y좌표(소수점 13)
    거리 distance 10 옵션 0 단위: 미터(m)

     

    무척많다. 전부 다 필요하진 않지만 일단 다 추가했다.

     

    public class Item {
        private String clCd;
        private String clCdNm;
        private String cmdcGdrCnt;
        private String cmdcIntnCnt;
        private String cmdcResdntCnt;
        private String cmdcSdrCnt;
        private String detyGdrCnt;
        private String detyIntnCnt;
        private String detyResdntCnt;
        private String detySdrCnt;
        private String distance;
        private String drTotCnt;
        private String estbDd;
        private String hospUrl;
        private String mdeptGdrCnt;
        private String mdeptIntnCnt;
        private String mdeptResdntCnt;
        private String mdeptSdrCnt;
        private String postNo;
        private String sgguCd;
        private String sgguCdNm;
        private String sidoCd;
        private String sidoCdNm;
        private String telno;
        private String XPos;
        private String YPos;
        private String yadmNm;
        private String ykiho;
        private String addr;
        public void setClCd(String clCd) {
            this.clCd = clCd;
        }
        public void setClCdNm(String clCdNm) {
            this.clCdNm = clCdNm;
        }
        public void setCmdcGdrCnt(String cmdcGdrCnt) {
            this.cmdcGdrCnt = cmdcGdrCnt;
        }
        public void setCmdcIntnCnt(String cmdcIntnCnt) {
            this.cmdcIntnCnt = cmdcIntnCnt;
        }
        public void setCmdcResdntCnt(String cmdcResdntCnt) {
            this.cmdcResdntCnt = cmdcResdntCnt;
        }
        public void setCmdcSdrCnt(String cmdcSdrCnt) {
            this.cmdcSdrCnt = cmdcSdrCnt;
        }
        public void setDetyGdrCnt(String detyGdrCnt) {
            this.detyGdrCnt = detyGdrCnt;
        }
        public void setDetyIntnCnt(String detyIntnCnt) {
            this.detyIntnCnt = detyIntnCnt;
        }
        public void setDetyResdntCnt(String detyResdntCnt) {
            this.detyResdntCnt = detyResdntCnt;
        }
        public void setDetySdrCnt(String detySdrCnt) {
            this.detySdrCnt = detySdrCnt;
        }
        public void setDistance(String distance) {
            this.distance = distance;
        }
        public void setDrTotCnt(String drTotCnt) {
            this.drTotCnt = drTotCnt;
        }
        public void setEstbDd(String estbDd) {
            this.estbDd = estbDd;
        }
        public void setHospUrl(String hospUrl) {
            this.hospUrl = hospUrl;
        }
        public void setMdeptGdrCnt(String mdeptGdrCnt) {
            this.mdeptGdrCnt = mdeptGdrCnt;
        }
        public void setMdeptIntnCnt(String mdeptIntnCnt) {
            this.mdeptIntnCnt = mdeptIntnCnt;
        }
        public void setMdeptResdntCnt(String mdeptResdntCnt) {
            this.mdeptResdntCnt = mdeptResdntCnt;
        }
        public void setMdeptSdrCnt(String mdeptSdrCnt) {
            this.mdeptSdrCnt = mdeptSdrCnt;
        }
        public void setPostNo(String postNo) {
            this.postNo = postNo;
        }
        public void setSgguCd(String sgguCd) {
            this.sgguCd = sgguCd;
        }
        public void setSgguCdNm(String sgguCdNm) {
            this.sgguCdNm = sgguCdNm;
        }
        public void setSidoCd(String sidoCd) {
            this.sidoCd = sidoCd;
        }
        public void setSidoCdNm(String sidoCdNm) {
            this.sidoCdNm = sidoCdNm;
        }
        public void setTelno(String telno) {
            this.telno = telno;
        }
        public void setXPos(String XPos) {
            this.XPos = XPos;
        }
        public void setYPos(String YPos) {
            this.YPos = YPos;
        }
        public void setYadmNm(String yadmNm) {
            this.yadmNm = yadmNm;
        }
        public void setYkiho(String ykiho) {
            this.ykiho = ykiho;
        }
        public void setAddr(String addr) {
            this.addr = addr;
        }
        public String getAddr() {
            return addr;
        }
        public String getClCd() {
            return clCd;
        }
        public String getClCdNm() {
            return clCdNm;
        }
        public String getCmdcGdrCnt() {
            return cmdcGdrCnt;
        }
        public String getCmdcIntnCnt() {
            return cmdcIntnCnt;
        }
        public String getCmdcResdntCnt() {
            return cmdcResdntCnt;
        }
        public String getCmdcSdrCnt() {
            return cmdcSdrCnt;
        }
        public String getDetyGdrCnt() {
            return detyGdrCnt;
        }
        public String getDetyIntnCnt() {
            return detyIntnCnt;
        }
        public String getDetyResdntCnt() {
            return detyResdntCnt;
        }
        public String getDetySdrCnt() {
            return detySdrCnt;
        }
        public String getDistance() {
            return distance;
        }
        public String getDrTotCnt() {
            return drTotCnt;
        }
        public String getEstbDd() {
            return estbDd;
        }
        public String getHospUrl() {
            return hospUrl;
        }
        public String getMdeptGdrCnt() {
            return mdeptGdrCnt;
        }
        public String getMdeptIntnCnt() {
            return mdeptIntnCnt;
        }
        public String getMdeptResdntCnt() {
            return mdeptResdntCnt;
        }
        public String getMdeptSdrCnt() {
            return mdeptSdrCnt;
        }
        public String getPostNo() {
            return postNo;
        }
        public String getSgguCd() {
            return sgguCd;
        }
        public String getSgguCdNm() {
            return sgguCdNm;
        }
        public String getSidoCd() {
            return sidoCd;
        }
        public String getSidoCdNm() {
            return sidoCdNm;
        }
        public String getTelno() {
            return telno;
        }
        public String getXPos() {
            return XPos;
        }
        public String getYPos() {
            return YPos;
        }
        public String getYadmNm() {
            return yadmNm;
        }
        public String getYkiho() {
            return ykiho;
        }
    }String 변수와 getter, setter가 전부다.

     

     

    public static List < Item > processXML(String str) throws ParserConfigurationException, IOException, SAXException { //비거래처

        List < Item > newList = new ArrayList < > ();

        InputSource is = new InputSource(new StringReader(str));
        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);


        String s = "";
        NodeList nodeList = document.getElementsByTagName("item");

        for (int i = 0; i < nodeList.getLength(); i++) {

            Element nodeElement = (Element) nodeList.item(i);
            Item item = new Item();
            try {

                NodeList yadmNm = nodeElement.getElementsByTagName("yadmNm"); //병원명
                item.setYadmNm(yadmNm.item(0).getChildNodes().item(0).getNodeValue());

                NodeList mdeptGdrCnt = nodeElement.getElementsByTagName("mdeptGdrCnt"); //의과일반의 총 수
                item.setMdeptGdrCnt(mdeptGdrCnt.item(0).getChildNodes().item(0).getNodeValue());

                NodeList telno = nodeElement.getElementsByTagName("telno");
                item.setTelno(telno.item(0).getChildNodes().item(0).getNodeValue());

                NodeList XPos = nodeElement.getElementsByTagName("XPos");
                item.setXPos(XPos.item(0).getChildNodes().item(0).getNodeValue());

                NodeList YPos = nodeElement.getElementsByTagName("YPos");
                item.setYPos(YPos.item(0).getChildNodes().item(0).getNodeValue());

                NodeList clCd = nodeElement.getElementsByTagName("clCd");
                item.setClCd(clCd.item(0).getChildNodes().item(0).getNodeValue());


            } catch (Exception e) {
                e.printStackTrace();
            }

            newList.add(item);

        }

        return newList;

    }

     

    그 다음은 String형식의 XML데이터에서 NodeList를 이용해서 필요한 애트리뷰트의 값을 쏙쏙 뽑아내서 새로 생성한 item 객체에 setter를 이용해 값을 넣었다.

     

     

    그렇게 불러온 item의 리스트에서 xPos, yPos 를 MapPoint.mapPointWithGeoCoord를 써서 좌표설정 해주고

     

    병원이름 외의 부가정보를 setItemName에다가 "/"로 구분해서 집어넣었다. 나중에 뷰에 넣을때 split("/") 으로 각각 넣을 생각으로 한 것인데 다른 방법이 있을지 생각해봐야겠다.

     

    try-catch 구문도 잊지 않고 써준다. 데이터중에 좌표값이 없는 것도 있다.

    그렇다고 for문을 통째로 try안에 넣었다가는 여러개의 데이터 중 하나에서만 예외가 발생해도 모든 데이터가 영향을 받는다. 

Designed by Tistory.