안드로이드(Android) RSS 구현1 - XmlResourceParser 를 이용하여 XML 파싱하기 |
환경 : Eclipse Mars, Android 4.2.2 |
이번예제는 XmlResourceParser 를 이용하여 resource 에서 읽어온 데이터를 파싱하는 예제 입니다. 파싱할 XML 파일은 res/xml 폴더에 있으며 여러 요소로 xml 을 요소명과 내부에 포함된 텍스트 값을 분리해서 화면에 보여줄 것입니다.
▼ 샘플을 만들기 전에 분석할 XML 파일을 만듭니다. res/xml 폴더에 parsing_data.xml 로 생성합니다.
<?xml version="1.0" encoding="utf-8"?> <rootelement1> <subelement> subelement 요소의 값 </subelement> <subelement> 두번째 subelement 요소의 값 <subsubelement> 두번째 subelement 의 subsubelement 요소의 값 </subsubelement> </subelement> </rootelement1>
▼ 먼저 파싱을 하기 위해 resource 폴더에서 XML 데이터를 읽어 옵니다. activity.getResource() 함수로 Resources 객체를 리턴 받습니다. 그리고 getXml() 함수로 샘플로 만들어 놓은 parsing_data.xml 읽어 옵니다.
Resources res = activity.getResources(); XmlResourceParser xpp = res.getXml(R.xml.parsing_data);
▼ 이렇게 XmlResourceParser 객체에 리턴받은 받은후 next() 함수로 읽을 준비를 합니다. 그리고 getEventType() 으로 현재 읽어 올 데이터의 형태를 판단하게 됩니다. 형태는 총 4가지 입니다.
l STATR_DOCUMENT : XML 문서의 시작을 알려줍니다.
l START_TAG : 요소의 시작 태그 이름을 가져옵니다.
l ENT_TAG : 요소의 종료 태그 이름을 가져옵니다
l TEXT : 시작과 종료태그에 싸여있는 Text 값을 가져옵니다.
l END_DOCUMENT : XML 문서의 종료를 알려줍니다.
▼ While 문을 돌려 ENT_DOCUMNET 가 나올 때 까지 돌면서 각 요소명과 Text 값을 읽어옵니다. XML 요소 태그명은 getName() 으로 읽어오고 요소에 싸인 Text 값은 getText() 로 읽어옵니다. 그렇게 읽어온 전체 값을 StringBuffer 객체에 저장한 후 String 으로 리턴합니다.
private String getEventsFromAnXML(Activity activity) throws XmlPullParserException, IOException { StringBuffer stringBuffer = new StringBuffer(); Resources res = activity.getResources(); XmlResourceParser xpp = res.getXml(R.xml.parsing_data); xpp.next(); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { stringBuffer.append("----- XML 분석 시작 ------"); } else if (eventType == XmlPullParser.START_TAG) { stringBuffer.append("\nSTART_TAG: " + xpp.getName()); } else if (eventType == XmlPullParser.END_TAG) { stringBuffer.append("\nEND_TAG: " + xpp.getName()); } else if (eventType == XmlPullParser.TEXT) { stringBuffer.append("\nTEXT: " + xpp.getText()); } eventType = xpp.next(); } stringBuffer.append("\n--- XML 분석 끝 ---"); return stringBuffer.toString(); }
▼ Xml 파싱을 위한 전체 activity 소스 입니다.
import java.io.IOException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.app.Activity; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.os.Bundle; import android.widget.TextView; public class XmlParserActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xml_parser); TextView myXmlContent = (TextView) findViewById(R.id.xmlData); String stringXmlContent; try { stringXmlContent = getEventsFromAnXML(this); myXmlContent.setText(stringXmlContent); } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private String getEventsFromAnXML(Activity activity) throws XmlPullParserException, IOException { StringBuffer stringBuffer = new StringBuffer(); Resources res = activity.getResources(); XmlResourceParser xpp = res.getXml(R.xml.parsing_data); xpp.next(); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { stringBuffer.append("----- XML 분석 시작 ------"); } else if (eventType == XmlPullParser.START_TAG) { stringBuffer.append("\nSTART_TAG: " + xpp.getName()); } else if (eventType == XmlPullParser.END_TAG) { stringBuffer.append("\nEND_TAG: " + xpp.getName()); } else if (eventType == XmlPullParser.TEXT) { stringBuffer.append("\nTEXT: " + xpp.getText()); } eventType = xpp.next(); } stringBuffer.append("\n--- XML 분석 끝 ---"); return stringBuffer.toString(); } }
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) RSS 구현5 - RSS 제목별 상세내용 구현 (1) | 2014.11.25 |
---|---|
안드로이드(Android) RSS 구현4 - RSS 피드 구현 제목,타이틀등 상세 구현 (0) | 2014.11.24 |
안드로이드(Android)RSS 구현3 - RSS 피드 읽어서 ListView 로 제목 표현하기 (0) | 2014.11.23 |
안드로이드(Android) RSS 구현2 - XML 파싱클래스를 이용해서 RSS Reader 구현하기 (5) | 2014.11.22 |
안드로이드(Android) Java 코드에서 색깔값 화면에 입히기 (0) | 2014.11.20 |
안드로이드(Android) 색깔을 xml 로 정의 하고 관리하기 (0) | 2014.11.19 |
안드로이드(Android) PhoneGap, 이클립스 플러그인 설치로 좀더 쉽게 개발하기 (0) | 2014.11.18 |
안드로이드(Android) 간단한 RatingBar 사용예제 (0) | 2014.11.18 |