coolsharp의 놀이터

'문자열 리소스 관리'에 해당되는 글 1건

  1. 2010.11.16 안드로이드 특수기호 및 다중 라인 문자열 리소스 관리 (2)
안드로이드에서 문자열을 리소스로 관리하려면 res/value/string.xml에 문자열을 입력하면 됩니다.

하지만 이 xml에는 단일 문자열 및 특수기호가 포함되지 않은 문자열을 추가할 수 없습니다.

XML 문법의 규칙에 <.>등의 문자는 바로 적용을 할 수가 없기 때문이죠.

하지만 불가능 한 것은 아닙니다. 특수문자를 처리할 수 있는 다른 방법으로 대입을 할 수가 있죠.

예를 들어 &lt;&rt;등으로 표현 할 수 있습니다.

하지만 이렇게 문자열을 관리하면 직관적이지도 않을 뿐더러 관리에 어려움이 많습니다.

XML문법에는 CDATA라는 문법이 있습니다.

CDATA 섹션안에 문자를 집어 넣으면 어떤 문자라도 표현이 가능 합니다.

즉, 특수 문자등을 표현하려면 CDATA를 이용하여 표현 할 수 있는 것이죠.

<![CDATA[
특수문자$%#^&$%*%^*$%^*^&$#%^#$@#$%@<>><><><>
줄넘김도 가능
]]>


이렇게 처리된 문자는 모두 그대로 XML에 담을 수 있습니다.

자 대충 이런것이 있으니 써먹어야겠죠?

어떻게 써먹어야 할까요?

안드로이드 프로그래밍을 하다보면 문자열을 담아두어야 할 필요가 있을 것 입니다.

예를 들어, 웹페이지의 기본 태그 정보등을 문자열 리소스로 담아 두는 것이 그 한 예가 될 수 있겠네요.

다음과 같은 문자열이 있다고 합시다.

        String msg = "이런들 어떠하며 저런들 어떠하리.";
        msg += "만수산 드렁칡이 얽혀진들 그 어떠하리";
        :
        msg += "";


안드로이드에서 문자열 소스 코드에 담아 유지하면 소스가 길어질 뿐 아니라 유지보수에도 어려움이 있습니다.

그런 코드를 다음과 같이 xml을 만들어 관리를 합니다.

1. 우선 res폴더 및에 xml이라는 폴더를 만듭니다.

2. xml 폴더 및에 stringresoure.xml이라는 xml 파일을 만듭니다.

xml에 다음과 같이 입력합니다.

<?xml version="1.0" encoding="utf-8"?>
<coolsharp>
<Data>
<![CDATA[
이런들 어떠하며 저런들 어떠하리.
만수산 드렁칡이 얽혀진들 그 어떠하리
(중략)
]]>
</Data>
</coolsharp>

해당 xml을 어떻게 리소스에서 가져오는지 다음 코드를 참고하세요.

import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.content.Context;
import android.content.res.XmlResourceParser;
import enspert.com.ips.phonemanager.R;

public class XMLManager {
    public String getXMLData(Context AContext, String AName) {
        XmlResourceParser parser = AContext.getResources().getXml(
                R.xml.template); // 리소스에 XML 데이터를 추가함 (res.폴더.xml파일)

        try {
            int eventType = parser.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT) {
                String name = null;

                switch (eventType) {
                case XmlPullParser.START_TAG:
                    name = parser.getName().toLowerCase();

                    if (name.equals(AName)) { // 이름이 같은 XML을 찾으면
                        // Attribute를 찾을때는 아래 코드 이용
                        // for (int i = 0;i < parser.getAttributeCount();i++) {
                        // String attribute =
                        // parser.getAttributeName(i).toLowerCase();
                        // if (attribute.equals("myattribute")) {
                        // String value = parser.getAttributeValue(i);
                        // return value;
                        // }
                        // }
                    }
                case XmlPullParser.CDSECT:
                    name = parser.getName();
                    if (name.equals(AName)) { // 이름이 같은 XML을 찾으면
                        parser.nextToken();
                        return parser.getText();
                    }
                case XmlPullParser.END_TAG:
                    name = parser.getName();
                    break;
                }

                eventType = parser.next();
            }
        } catch (XmlPullParserException e) {
            throw new RuntimeException("Cannot parse XML");
        } catch (IOException e) {
            throw new RuntimeException("Cannot parse XML");
        } finally {
            parser.close();
        }
        return "";
    }
}

이제 어떻게 사용하는지 봅시다.

XMLManager xml = new XMLManage();
xml.getXMLData( context, "Data");

다음과 같은 두 줄로 해당 문자열을 확인할 수 있습니다.

저작자 표시 비영리 변경 금지
신고
Posted by coolsharp Trackback 0 Comment 2

댓글을 달아 주세요

  1.  댓글주소 수정/삭제 댓글쓰기 급한 개발자. 2011.07.03 02:54 신고

    감사합니다. 위의 코드를 너무 유용하게 썼습니다.

  2.  댓글주소 수정/삭제 댓글쓰기 Favicon of http://coolsharp.tistory.com coolsharp 2011.07.05 09:31 신고

    도움이 되셨다니 다행입니다.



티스토리 툴바