XML Data Parsing on Android Platform

조회수 1441회

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();

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

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

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

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 참고요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)