어플 내부에 있는 XML 파일을 파싱하는 예제다.
=== student.xml ===
|
<person> <student> <name>홍길동</name> <age>32</age> <address>용인</address> </student> <student> <name>이순신</name> <age>31</age> <address>서울</address> </student> <student> <name>강감찬</name> <age>35</age> <address>충청</address> </student> </person> |
예제는 화면 출력 용도가 아니라 로그파일에 기록되는 결과를 보기 위한 목적이다.파싱하는 소스 코드
- 먼저 layout 디렉토리 밑에 raw 라는 디렉토리를 생성한다.
- raw 디렉토리에 student.xml 파일을 생성하고 xml 내용을 추가한다.
- MainActivity.java 에서 아래와 같은 코드를 작성한다.
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity { final static String TAG ="XML";
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
parser(); }
private void parser(){ Log.i(TAG, "parser()");
// 내부 xml파일이용시 InputStream inputStream = getResources().openRawResource(R.raw.student); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader reader = new BufferedReader(inputStreamReader);
XmlPullParserFactory factory = null; XmlPullParser xmlParser = null;
try { factory = XmlPullParserFactory.newInstance(); xmlParser = factory.newPullParser(); xmlParser.setInput(reader);
int eventType = xmlParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){ switch (eventType){ case XmlPullParser.START_DOCUMENT: Log.i(TAG, "xml START"); break; case XmlPullParser.START_TAG: Log.i(TAG, "Start TAG :" + xmlParser.getName()); break; case XmlPullParser.END_TAG: Log.i(TAG,"End TAG : "+ xmlParser.getName()); break; case XmlPullParser.TEXT: Log.i(TAG,"TEXT : "+ xmlParser.getText()); break; } try { eventType = xmlParser.next(); } catch (IOException e) { e.printStackTrace(); } } } catch (XmlPullParserException e) { e.printStackTrace(); } finally{ try{ if(reader !=null) reader.close(); if(inputStreamReader !=null) inputStreamReader.close(); if(inputStream !=null) inputStream.close(); }catch(Exception e2){ e2.printStackTrace(); } }
} } |
이제 컴파일을 하고 결과를 살펴본다.
이제 다음에는 ListView 에 출력하는 걸 해보면 XML 파싱을 정확하게 파악할 수 있다.