Android/XmlPullParser, EUC-KR

Android XmlPullParser with EUC-KR

Soul-Learner 2012. 5. 11. 17:46

Android XmlPullParser with EUC-KR

안드로이드에서 제공하는 XML 파서인 XmlPullParser에서 한글을 포함한 XML문서를 사용하는 예

XmlPullParser를 사용하여 태그의 속성 값을 사용하는 내용도 포함하고 있음


참고 : AndroidManifest.xml 에 다음 항목을 추가해야 인터넷에 접속할 수 있음

<uses-permission android:name="android.permission.INTERNET" />


서버측(JSP)

<?xml version="1.0" encoding="EUC-KR" ?>

<%@ page contentType="text/xml; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<fruits>

<fruit num="1">

<name>오렌지</name>

<price>2000</price>

</fruit>

<fruit num="2">

<name>Melon</name>

<price>3000</price>

</fruit>

<fruit num="3">

<name>Apple</name>

<price>4000</price>

</fruit>

</fruits>

클라이언트 측(Android Activity)

package test.android.hello;


import java.net.*;

import java.io.*;


import org.xmlpull.v1.*;


import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;


public class AndroidWeb extends Activity {


TextView textview;

URLConnection conn = null;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        textview = (TextView) this.findViewById(R.id.tv);

       

        try {

            // Construct data

            String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");

            data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("홍길동", "UTF-8");

        

            // Send data

            URL url = new URL("http://211.183.3.170:8282/WebTest/android/fruits.jsp");

            conn = url.openConnection();

            // If you invoke the method setDoOutput(true) on the URLConnection, it will always use the POST method.

            conn.setDoOutput(true);

            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

            wr.write(data);

            wr.flush();

        

            // Get the response

            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"EUC-KR"));

            String line = null;

            String response = "";

            while ((line = rd.readLine()) != null) {

               response += line;

            }

            

            findName(response);

            //textview.setText(response.trim());

            wr.close();

            rd.close();

        }

        catch (Exception e) {

        }

    } 

    

    /* XmlPullParser 와 XML태그의 속성을 이용, 특정 엘리먼트의 값을 추출하는 예 */

    private void findName(String xmlString) {

    try {

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

factory.setNamespaceAware(true);

XmlPullParser xpp = factory.newPullParser();

xpp.setInput( new StringReader ( xmlString));

int eventType = xpp.getEventType();


       while (eventType != XmlPullParser.END_DOCUMENT) {

           if(eventType == XmlPullParser.START_DOCUMENT) {

            Log.i("Start document","시작태그");

           } else if(eventType == XmlPullParser.START_TAG) {

            Log.i("Start tag", ""+xpp.getName());

            String tagName = xpp.getName();

            if(tagName.equals("fruit")) {

            String num = xpp.getAttributeValue(0);

            Log.i("속성 값", num);

            }

           

            int cnt = xpp.getAttributeCount();

            if(cnt != -1) {

            for(int i=0;i<cnt;i++) {

            if(xpp.getAttributeName(i).equals("num")) {

            if(xpp.getAttributeValue(0).equals("1")) {

            //Log.i("찾음", "1번");

            xpp.next(); // empty TEXT

            xpp.next(); // name element

            xpp.next(); // TEXT(오렌지)

            String fruitName = xpp.getText(); // 오렌지

            xpp.next(); // </name>

            xpp.next(); // empty TEXT

            xpp.next(); // price element

            xpp.next(); // 2000

            String priceValue = xpp.getText();

            Log.i(fruitName, priceValue); 

            textview.setText(fruitName+":"+priceValue);

            }

            }

            }

            }

           

           } else if(eventType == XmlPullParser.END_TAG) {

            Log.i("End tag", ""+xpp.getName());

           } else if(eventType == XmlPullParser.TEXT) {

               Log.i("TEXT", ""+xpp.getText());

           }

           eventType = xpp.next();

       }

} catch (Exception e) {

Log.e("오류", ""+e.getMessage());

}

    Log.e("종료", "프로그램 종료");

    }

}