2009-02-01 8 views
6

Ho una semplice classe Java che sembra qualcosa di simile:
Come caricare facilmente un file di configurazione basato su XML in una classe Java?

public class Skin implements Serializable { 

    public String scoreFontName = "TahomaBold"; 
    ... 
    public int scoreFontHeight = 20; 
    ... 
    public int blockSize = 16; 
      ... 

    public int[] nextBlockX = {205, 205, 205, 205}; 
      ... 
    public String backgroundFile = "back.bmp"; 
      ... 
} 



mi piacerebbe leggere queste informazioni da un semplice file XML che sembra qualcosa di simile:

<xml> 
    <skin> 
     <scoreFontName>"Tahoma Bold"</scoreFontName> 
     ... 
     <scoreFontHeight>20</scoreFontHeight> 
     ... 
     <blockSize>16</blockSize> 
     ... 
     <nextBlockX> 
      <0>205</0> 
      <1>205</1> 
      <2>205</2> 
      <3>205</3> 
     <nextBlockX> 
     .... 
     <backgroundFile>"back.bmp"</backgroundFile> 
     ... 
    <skin> 
</xml> 

C'è un modo semplice per iniettare le informazioni dal file xml direttamente nei nomi delle variabili piuttosto che doverle analizzare manualmente? Non mi dispiace usare una libreria esterna.

Qualsiasi aiuto è apprezzato.

risposta

10

XStream è davvero una grande libreria per questo.

http://x-stream.github.io/

È possibile impostare alias per la classe e anche formati di dati personalizzati per rendere il file XML più leggibile.

+0

Io uso Xstream per un bel po 'di cose. Mi piace che sia facile estenderlo in modo da far apparire il file nel modo desiderato. –

4

In realtà raccomando Apache Digester, poiché se le classi sono bean, gestirà semplicemente la lettura dell'XML in esse.

5

alternative alle soluzioni già menzionati (XStream e Apache Commons Digester) sarebbero Java proprio JAXB per un approccio generale paragonabile, o soluzioni più orientato verso configurazione come Apache Commons Configuration o Java di Preferences API.

+0

+1 per Configurazione Commons. – Viccari

2

Puoi anche usare Spring - anche se potrebbe essere un po 'eccessivo per una classe se è per un gioco mobile!

1

Utilizzare JAXB. È incluso nel JDK che inizia con Java 1.6.

2

Ho recentemente iniziato a utilizzare Simple http://simple.sourceforge.net/ per XML alla mappatura degli oggetti. Usa annotazioni all'interno della classe in modo simile al metodo che uso in C# ed è bello e pulito. Puoi anche suddividere il file in più classi e caricare il salvataggio è una semplice fodera.

Nel tuo caso la struttura della Classe sarebbe simile.

import org.simpleframework.xml.Element; 
import org.simpleframework.xml.Root; 

@Root (Name="skin") 
public class Skin { 

    @Element(name="scoreFontName") // name param not needed if class field is the same as the xml (element) value 
    private String scoreFontName 

    @Element 
    private int scoreFontHeight 

    @Element 
    private int blockSize 

    @ElementArray 
    private int[] nextBlockX 

    @Element  
    private String backgroundFile 

    // getters 
}  

Nota Una differenza è che l'array sarà salvato come questo

<nextBlockX> 
    <int>205</int> 
    <int>205</int> 
    <int>205</int> 
    <int>205</int> 
<nextBlockX> 

Ma voi avete la possibilità di aggiungere (ingresso = "myName") per l'annotazione in cui è arrivata la XML essere salvato in questo modo

<nextBlockX> 
    <myName>205</myName> 
    <myName>205</myName> 
    <myName>205</myName> 
    <myName>205</myName> 
<nextBlockX> 

Ma il risultato finale è lo stesso una volta caricato nell'array.