XML Data Parsing on Android Platform


public class QuestContainer {

private List<QUEST> confirmed = new List<QUEST>();
private List<QUEST> complete = new List<QUEST>();
private List<QUEST> possible = new List<QUEST>();
private List<QUEST> im_possible = new List<QUEST>();

public List<QUEST> Confirmed
{
    get { return confirmed; }
    set { confirmed = value; }
}

public List<QUEST> Complete
{
    get { return complete; }
    set { complete = value; }
}

public List<QUEST> Possible
{
    get { return possible; }
    set { possible = value; }
}

public List<QUEST> im_Possible
{
    get { return im_possible; }
    set { im_possible = value; }
}

} 위는 xml데이터를 가져올 공간입니다.

불려진 xml데이터는 자동으로 분류됩니다.

[im_Possible]

[QUEST]
  [Questname]시작[/Questname]
  [Description]이제 시작이에요![/Description]
  [Class]ALL[/Class]
  [Level]0[/Level]
  [STR]0[/STR]
  [CON]0[/CON]
  [NT]0[/INT]
  [WIS]0[/WIS]
  [DEX]0[/DEX]
  [Title /]
  [Item /]
  [questType]STORY[/questType]
  [difficulty]EASY[/difficulty]
  [eXPEDIENT]MOV[/eXPEDIENT]
  [questReward]GOLD[/questReward]
[/QUEST]

[/im_Possible]

위는 xml 데이터에 저장되는 양식입니다.

Type[] questType = { typeof(QUEST) };

XmlSerializer serializer = new XmlSerializer(typeof(QuestContainer), questType);

TextReader textReader = new StreamReader(Application.persistentDataPath + "/Quests.xml");

QuestContainer = (QuestContainer)serializer.Deserialize(textReader);

textReader.Close();

위는 현재 사용중인 방법입니다.

하지만 이 방법대로는 안드로이드 플랫폼에서 작동하지 않습니다.

이 것을 안드로이드 플랫폼에서 작동하도록 하고 싶습니다.

  • 2016년 02월 13일에 작성됨

조회수 263


1 답변


Simple이라는 안드로이드에서 동작하는 프레임웍이 있는데요.

설치

http://simple.sourceforge.net/download.php 여기서 최신버전을 받아서 안드로이드 프로젝트에 lib이라는 폴더를 만들고 다운로드받은 jar파일을 여기에 추가하세요.

이클립스라면... Project -> Select Build Path -> Select Configure Build Path -> Library -> add External Jars해서 추가해 주시구요.

사용

http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php 여기에 사용법이 나옵니다.

우선 Quest라는 클래스의 설계를 변경해 주셔야 하는데요. @element라는 어노테이션을 써야 하고, 값 마다 getQuestName같은 메소드를 만들어 주셔야 해요.

pubic class Quest{
//각 값에 @element라는 어노테이션을 붙여주고
    @element
    private String QuestName;
    @element
    private int Level;
//생성자도 만들어 주고 
  public Quest(String Questname, int Level){
    this.QuestName = QuestName;
    this.Level = Level;
  }
//각 값 마다 get메소드를 만들어 줍니다.
  public String getQuestname(){
    return QuestName;
  }

  public int getLevel(){
    return Level;
  }
}

Serialize할때는

//Persister라는걸 이용해서 serialize합니다.
Serializer serializer = new Persister();
Quest quest = new Quest("시작",0);
File result = new File("Quests.xml");

serializer.write(example, result);

Deserialize할때는

Serializer serializer = new Persister();
File source = new File("Quests.xml");

Quest quest = serializer.read(Quest.class, source);

하면 됩니다.

보니까 리스트도 쓰고 싶으신것 같던데 http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#inline 참고요.

  • 2016년 02월 13일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close