2015년 4월 9일 목요일

xml 파일을 파싱하는 한가지 방법(안드로이드에서)

1. Android 프로젝트 assets 폴더내에 저장한 xml파일 info.xml
    에 id 라는 명칭으로 안드로메다 라는 값를 입력함

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<info-list>
    <info>
        <id>안드로메다</id>
    </info>
</info-list>


2. muinfo.java 라는 객체 생성용 클래스 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MuInfo{
    private String id;
 
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
 
    @Override
    public String toString(){
        StringBuffer sb = new StringBuffer();
        sb.append(String.format("[%s]%n"getClass().getSimpleName()));
        sb.append(String.format("id: %s%n", id));
        return sb.toString();
    }
}


3. InfoService.java 라는 클래스를 생성후 xml 내용을 
    가져온다.

    /*이렇게 작성하면 assets폴더내에 있는 xml에 있는 내용을 가져와서
    해당 이니셜 (여기서는 id만)
    에 매칭되는 문자를 id에 저장후 (여러개면 여러 변수)
    이걸 muInfo 라는 객체에 저장후 처음에 선언했던 
    infoMap에 put해줍니다.*/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class InfoService{
    private static final String INFO_FILE  = "info.xml";
    private static Map<String, infoo> infoMap = new LinkedHashMap<String, info>();
 
    public static Map<String, Info> getInfo(Context context){
        if(infoMap.size() == 0){
            InputStream in = null;
            try {
                in = context.getAssets().open(INFO_FILE); //안드로이드용
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document doc = builder.parse(in);
                doc.getDocumentElement().normalize();
                Element infoListElement = doc.getDocumentElement();
                NodeList children = infoListElement.getChildNodes();
                String id;
                
                for(int i=0; i<children.getLength(); i++){
                    Node infoNode = children.item(i);
                    if(infoNode.getNodeType() == Node.TEXT_NODE)
                        continue;
                Element infoElement = (Element)infoNode;
                id = infoElement.getElementsByTagName("id").item(0).
                                                 getChildNodes().item(0).getNodeValue();
 
                muInfo info = new muInfo();
                info.setId(id);
                infoMap.put(id, info);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(in!=null){ tryin.close(); }catch(IOException e){ } }
        }
    }
    return infoMap;
 }

4. activity 선언부에 다음과 같이 작성

private Map<String, Info> InfoMap;


5. activity onCreat 함수에 다음 내용 추가

1
2
3
4
5
6
7
            InfoMap = InfoService.getInfo(this);
            String Id = ""+InfoMap.get(Id);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

그러면 id라는 변수 xml 에서 지정한 id 값이 저장됩니다.



댓글 없음:

댓글 쓰기