마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

여러개의 xml을 파싱할경우 문의드립니다.

0 추천

안녕하세요 xmlpullparser를 이용하여 데이터를 받아오는데 궁금한게 있어서 여쭈어 봅니다.
현재 서버로 부터 xml을 받으면 자료를 다음과 같이 파싱을 합니다.

   while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {
    case XmlPullParser.START_DOCUMENT:break;
    case XmlPullParser.END_DOCUMENT:break;
    case XmlPullParser.START_TAG:
     sTag = pr.getName();
     if (sTag.equals("vector")) {
      flag = true;
     }
     if (flag) {
      if(sTag.equals("data")) {
      bc = new BuyContent();
      }
      
      if(sTag.equals("PRCS_ID")) {
       bc.prcsId = pr.getAttributeValue(0);
      } else if (sTag.equals("PROD_USER_ID")) {
       bc.produserId = pr.getAttributeValue(0);
      } else if (sTag.equals("PROD_USER_NAME")) {
       bc.produserName = pr.getAttributeValue(0);
      } else if (sTag.equals("PROD_ID")) {
       bc.prodId = pr.getAttributeValue(0);
      } else if (sTag.equals("PROD_NAME")) {
       bc.title = pr.getAttributeValue(0);
      } else if (sTag.equals("IN_MOBILE_NO")) {
       bc.inmobileNo = pr.getAttributeValue(0);
      } else if (sTag.equals("PRCS_STATUS")) {
       bc.prcsStatus = pr.getAttributeValue(0);
      } else if (sTag.equals("REG_DATETIME")) {
       bc.regDatetime = pr.getAttributeValue(0);
      }
     }
     break;
    case XmlPullParser.END_TAG:
     sTag = pr.getName();
     
     if(sTag.equals("data")) {
      parseBuy.add(bc);
     }
     
     if (sTag.equals("vector")) {
      flag = false;
     }
     break;
    case XmlPullParser.TEXT:break;
    }
    eventType = pr.next();
   }

그런데 문제는 서버와 통신을 30번 가까이 해서 xml도 30개 정도를 받는데 그때그때 파싱을 해서 정보를 보여주고 있습니다.

위의 파서를 class로 만들어서 받는데 30개의 xml에 대해서 30의 parser(class)를 만들었습니다.

그런데 이건 아무래도 아닌것 같아서 수정을 해야 할 듯 한데 문의 드립니다.

위의 sTag.equals("") 의 ""안쪽 부분만 30번의 파싱마다 조금씩 틀려지는데 이거 공통으로 뺄 방법이 없는가요?

도움 요청드립니다.

wind (2,240 포인트) 님이 2013년 5월 24일 질문

1개의 답변

0 추천
30개의 각 XML 파일의 Element 이름들을 왠만하면 표준화해서 사용하시기 바랍니다. 어쩔수 없이 하기 힘들다면, XML 파싱 트리 구조를 예측해가며 파싱을 하셔야 할 듯 싶습니다.
두부고기 (3,820 포인트) 님이 2013년 5월 24일 답변
살짝 질문이 잘못됐었나 봅니다 한 20개 정도의 element가 있는데 이 엘리먼트 들이 예를들어 a라는 request에 대해서는 서버에서1,2,3,4,5 라는 엘리먼트를 주고 b라는 request에서는 1,4,7,8,9 이런식으로 중복되는 속성도 있고 하는 식으로 한 20개 정도의 엘리먼트가 조합만 바뀌는 겁니다. 그런 상황에서 그거에 맞게 동적으로 한개의 파싱클래스에서 처리를 할 수 있나 문법? 적인 도움을 요청드리고 있습니다.
각 XML 요청의 엘리멘트들은 똑같은 수로 만들어지는건가요? 각 XML 엘리멘트들의 수가 같지만 엘리멘트 라벨이 동적으로 달라진다면, 제가 생각할 수 있는 방법은 아마 파싱 트리 구조 밖에 없는 것 같습니다 ㅠㅠ.

각 XML 파일에 ID를 부여하시고, ID에 걸맞게 XML Tree Depth마다 동적으로 조건문을 이용해 요청처리를 하는 알고리즘 밖에 지금 생각이 들지 않네요 ㅎㅎ.

몇몇 XML 요청이 다른 XML 요청에 비해 적거나 많은 엘리멘트들을 만들어내야한다면, 그 만들어질 childNodes 수를 조건문으로 만들어 해보시는 건 어떨까요?
...