2011-07-21 5 views
2

Donc ce que j'essaie de faire est de parcourir mon fichier XML montré ci-dessous et sauvegarder le contenu dans les objets pour chaque "écran".Enchaînement XML pour créer un objet

Mon XML est comme suit:

<?xml version="1.0" encoding="utf-8"?> 
<screens> 
    <screen id="house" backdropimage = "R.drawable.scene"> 
     <region id="one" rleft = "200" rright = "200" rtop = "10" rbottom = "10"/> 
     <region id="two" rleft = "220" rright = "220" rtop = "12" rbottom = "12"/> 
     <paths left = "park" right = "x" top = "x" bottom = "x"/> 
    </screen> 
    <screen id="park" backdropimage = "R.drawable.park"> 
     <region id="1" rleft = "500" rright = "200" rtop = "10" rbottom = "10"/> 
     <paths right = "house" left = "x" top = "x" bottom = "x"/> 
    </screen> 
</screens> 

L'idée est que je crée un objet dans mon tableau de l'écran avec les informations contenues dans chaque bloc écran. L'identifiant et la toile de fond sont corrects mais j'ai des problèmes d'itération à travers les parties 'région' car il y aura différentes quantités d'entrées de régions dans différentes sections. C'est le code im en utilisant actuellement ut pour une raison quelconque, il passe par 'un' 'deux' 'et' 1 'où je voudrais qu'il s'arrête à/écran.

depth = parser.getDepth(); 
      while(parser.getDepth() == depth) { 

       if(event==XmlPullParser.START_TAG && parser.getName().contentEquals("region")) { 
        Region reg = new Region(parser.getAttributeIntValue(null, "rleft", 0), 
          parser.getAttributeIntValue(null, "rtop", 0), 
          parser.getAttributeIntValue(null, "rright", 0), 
          parser.getAttributeIntValue(null, "rbottom", 0)); 
        //String str = parser.getIdAttribute(); 
        newScreen.area = (reg); 
        //Rect temp = reg.getBounds(); 
        newScreen.areaArray.add(reg); 
      parser.next(); 
      } 

C'est la première fois que je l'ai essayé d'utiliser des fichiers XML en java/android et je suis encore assez nouveau pour Java sur l'ensemble, je suis sûr que je ne suis pas en utilisant la meilleure méthode ici et apprécierait toute aide. Merci

Répondre

3

J'utilise Simple-xml pour sérialiser mon xml à un objet. Ils ont assez bonne documentation, vous pouvez obtenir la bibliothèque ici: http://simple.sourceforge.net/

Voici un exemple:

YourActivity.java

import org.simpleframework.xml.Serializer; 
import org.simpleframework.xml.core.Persister; 

.... 
private Screens myScreens; 

.... 


private void serializeMyXml(){ 
     File source = new File("directory/yourXmlFile.xml"); 
     Serializer serializer = new Persister(); 
     try { 
      myScreens= serializer.read(Screens.class, source); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

Screens.java

import java.io.Serializable; 
import java.util.List; 

import org.simpleframework.xml.ElementList; 
import org.simpleframework.xml.Root; 

@Root 
public class Screensimplements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1111;//some random unique serialversion id 

    @ElementList(inline=true) 
    private List<Screen> list; 

    public List<Screen> getList() { 
     return list; 
    } 

} 

S creen.java

import java.io.Serializable; 

    import org.simpleframework.xml.Attribute; 

    public class Entity implements Serializable{ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 5004451486040850151L; 

     @Attribute 
     private String backdropimage; 

     @Attribute 
     private int id; 

     @ElementList 
     private List<Region> region; 

@Element 
private Paths paths; 

     public int getId() { 
      return id; 
     } 

     public String getBackdropimage() { 
      return backdropimage; 
     } 

    } 

Et ainsi de suite .. et ainsi de suite .. en lire davantage dans le documewntatio.

Bonne chance

+0

Très bien apprécier ces informations, il se trouve mon code fonctionnait comme je m'y attendais à je viens de lire la sortie de manière incorrecte. – Be77amy

+1

@tdtje: Excellente réponse btw. –

+0

@tdtje J'analyse xml dans android tout le temps et je suis content d'être tombé sur ce post. Cette bibliothèque semble beaucoup mieux alors en utilisant un analyseur de pull. Je vais passer à cette méthode à moins qu'elle ne soit trop lente. Merci. –