2012-03-30 14 views
0

Ich versuche, die folgende XML deserialisieren:Java Simple-XML Deserialisieren

<jdownloader> 
    <package 
     package_eta="~" 
     package_linksinprogress="0" 
     package_linkstotal="5" 
     package_loaded="0 B" 
     package_name="Unchecked" 
     package_percent="0.00" 
     package_size="0 B" 
     package_speed="0 B" 
     package_todo="0 B" > 

     <file 
      file_hoster="hoster_name" 
      file_name="name" 
      file_package="Unchecked" 
      file_percent="0.09" 
      file_speed="0" 
      file_status="[Aborted] " > 

      <file 
       file_hoster="hoster_name" 
       file_name="name" 
       file_package="Unchecked" 
       file_percent="0.03" 
       file_speed="0" 
       file_status="[Aborted] " > 

       <file 
        file_hoster="hoster_name" 
        file_name="name" 
        file_package="Unchecked" 
        file_percent="0.05" 
        file_speed="0" 
        file_status="[Aborted] " > 
       </file> 
      </file> 
     </file> 
    </package> 
</jdownloader> 

Ich kann nicht scheinen einfach xml zu bekommen diese den Weg deserialisieren ich will.

Ich brauche ein Objekt für das Paket (wird mehrere Pakete in jedem XML sein), und eine Liste von Dateiobjekten als Kind des Paketobjekts. Der XML-Code kann nicht geändert werden, und es scheint, dass jedes Dateielement unter dem vorherigen Dateielement verschachtelt ist und nicht alle unter dem übergeordneten Paket.

Der Code, den ich für diese haben so weit ist:

@Root(name = "jdownloader") 
public class DownloadsModel { 

    @ElementList(name="package") 
    public List<PackageModel> Package; 

} 


@Root(name = "package") 
public class PackageModel { 

    @ElementList(name="file") 
    public List<FileModel> file; 

    @Attribute 
    public String package_eta; 

    @Attribute 
    public String package_linksinprogress; 

    @Attribute 
    public String package_linkstotal; 

    @Attribute 
    public String package_loaded; 

    @Attribute 
    public String package_name; 

    @Attribute 
    public String package_percent; 

    @Attribute 
    public String package_size; 

    @Attribute 
    public String package_speed; 

    @Attribute 
    public String package_todo; 

} 

@Root(name = "file") 
public class FileModel { 

    @Attribute 
    public String file_hoster; 

    @Attribute 
    public String file_name; 

    @Attribute 
    public String file_package; 

    @Attribute 
    public String file_percent; 

    @Attribute 
    public String file_speed; 

    @Attribute 
    public String file_status; 

} 

Wenn Simple-XML versucht, die XML deserialisiert, seine für die Dateielemente Attribute in der Paketklasse suchen.

Kann mir jemand helfen?

Antwort

0

Um zu beginnen, versuchen zu ersetzen:

public class PackageModel { 

     @ElementList(name="file") 
     public List<FileModel> file; 

mit diesem

public class PackageModel { 

     @ElementList(name="file", inline=true) 
     public List<FileModel> file; 

Sie dann weg mit mehreren FileModel Definitionen tun können.

Weitere Details here.

0

Ihr Modell ist, das ist wie

@Root(name = "package") 
public class DownloadsModel { 

    @ElementList(name = "package", inline = true) 
    public List<PackageModel> Package; 
} 

Paket:

@Root(name = "package") 
public class PackageModel { 

    @ElementList(name = "file", inline = true) 
    public List<FileModel> file; 
    .... 
} 

und für Datei (Die XML kann nicht geändert werden, und es scheint jedes Dateielement wird unter dem vorherigen Dateielement verschachtelt , anstelle von allem unter der Paketmutter)

@Root(name = "file") 
public class FileModel { 

@ElementList(name = "file", inline = true, required = false) 
public List<FileModel> file; 

@Attribute 
public String file_hoster; 

.... 
}