안드로이드 XML 파싱

2017. 11. 13. 16:55 안드로이드/개발 TIP

안드로이드 xml 파싱 두번째 파트입니다. 

 

xml 파싱을 하는부분을 설명할것인데

 

파싱을 하는부분은 안드로이드 프로젝트안에 하나의 엑티비티(MapViewActivity)에서

 

한다는 가정하에 설명하겠습니다. 

 


 url 에 자신의 아이피주소 + jsp파일 + 쿼리문에서 조건의 값을 넣어줍니다.

 

현재 넣어준 area = busan 이라는값은 데이터베이스에있는 area 라는 멤버중에 Busan만 들고 오게하는 것 입니다.

 

그래서 part1 부분에서 area가 busan인 값들만 보였던 것 입니다.

 

 


 

    <웹서버에 xml 구조로 뿌려놓은 화면>

 

 

파싱을하는 소스를 보시겠습니다.

 

----------------------------------------------------------------------------------------

 

 

private ArrayList<MapList> contacts2;

private ArrayList<String> address, latitude, longitude;

 

address = new ArrayList<String>(); 
latitude = new ArrayList<String>();
longitude = new ArrayList<String>();  
  
contacts2 = new ArrayList<MapList>();

 

 

//xml 파싱하기 위해서 풀 파서 쓴다.

try {

 

   URL text = new URL(url); // 파싱하고자하는 URL
   
   XmlPullParserFactory parserCreator = XmlPullParserFactory .newInstance(); 
   
   XmlPullParser parser = parserCreator.newPullParser(); // XMLPullParser 사용

   parser.setInput(text.openStream(), null);   // 파싱하기위해서 스트림을 열어야한다.

   int parserEvent = parser.getEventType();  // 파싱할 데이터의 타입을 알려준다.
   String tag;

   boolean inTitle = false, inTitle2 = false, inTitle3 = false, inTitle4 = false;
   while (parserEvent != XmlPullParser.END_DOCUMENT) { // xml 파일의 문서 끝인가? 
    switch (parserEvent) {
    
    case XmlPullParser.TEXT:

     tag = parser.getName();
     if (inTitle) {
      String max = parser.getText();
      address.add(max);        // ArrayList에 추가

     }else if (inTitle2) {
      String max = parser.getText();
      latitude.add(max);
     }else if (inTitle3){
      String max = parser.getText();
      longitude.add(max);
     }
     
     break;
     
    case XmlPullParser.END_TAG: // 나중에
     tag = parser.getName();
     if (tag.compareTo("address") == 0) {  // 태그가 address인지 비교

      inTitle = false;
     } else if (tag.compareTo("latitude") == 0) { 
      inTitle2 = false;
     } else if (tag.compareTo("longitude") == 0) {
      inTitle3 = false;
     } 
     
     break;
     
    case XmlPullParser.START_TAG: // 먼저 
     tag = parser.getName();
     
     if (tag.compareTo("address") == 0) {
      inTitle = true;
     } else if (tag.compareTo("latitude") == 0) {
      inTitle2 = true;
     } else if (tag.compareTo("longitude") == 0) {
      inTitle3 = true;
     } 
     
     break;
    }
    parserEvent = parser.next();
   }
  } catch (Exception e) {
   Log.e("dd", "Error in network call", e);
  }
    
  
        for (int loop = 0; loop < address.size(); loop++) {   

    contacts2.add(new MapList(address.get(loop), latitude.get(loop), longitude.get(loop)));    
  
        }
        
        Toast.makeText(MapViewActivity.this, contacts2.get(0).getAddress(), Toast.LENGTH_SHORT);

   

      // 파싱이 제대로 되었는 지 Toast 를 통해 첫번째 값을 띄워본다.

 

---------------------------------------------------------------------------------------

 

MapList.java          //  MapList 는 파싱을한 주소값, 위도, 경도를 담기위한 클래스입니다. (파싱과는 상관없음)

 

package BongSa.bongsa;

// MapList 클래스

public class MapList {
 private String address,latitude, longitude;
 
 
 public MapList(){}
 
 public MapList(String address, String latitude, String longitude){
  this.address = address;
  this.latitude = latitude;
  this.longitude = longitude;
  
  
 }
 public void setAddress(String address){
  this.address = address;
 }
 public String getAddress(){
  return address;
 }
 
 public void setLatitude(String latitude){
  this.latitude = latitude;
 }
 public String getLatitude(){
  return latitude;
 }
 
 
 public void setLongitude(String longitude){
  this.longitude = longitude;
 }
 public String getLongitude(){
  return longitude;
 }
 
 
 

} 


출처 : http://blog.naver.com/sungjun818/130129887321