2009-02-01 16 views
6

Tengo una simple clase Java que se ve algo como esto:
¿Cómo cargar fácilmente un archivo de configuración basado en XML en una clase de 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"; 
      ... 
} 



me gustaría leer esta información desde un archivo XML simple que se ve algo como esto:

<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> 

¿Existe alguna manera fácil de insertar la información del archivo xml directamente en los nombres de las variables en lugar de tener que analizarla manualmente? No me importa usar una biblioteca externa.

Cualquier ayuda es apreciada.

Respuesta

10

XStream es realmente una gran biblioteca para esto.

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

Puede configurar alias para la clase e incluso los formatos de datos personalizados para que el archivo XML sea más legible.

+0

Uso Xstream para bastantes cosas. Me gusta que sea fácil de extender para que el archivo se vea como lo desea. –

4

De hecho, recomendaría Apache Digester, ya que si sus clases son beans, simplemente se encargarán de leer el XML en ellas.

5

Alternativas a las soluciones ya mencionadas (XStream y Apache Commons Digester) serían de Java propia JAXB para un enfoque general comparable, o soluciones más adaptado hacia la configuración como Apache Commons Configuration o Java de Preferences API.

+0

+1 para la configuración de Commons. – Viccari

2

También puedes usar Spring, ¡aunque puede ser un poco exagerado para una clase si es para un juego móvil!

1

Utilice JAXB. Está incluido en el JDK que comienza con Java 1.6.

2

Recientemente comencé a usar Simple http://simple.sourceforge.net/ para XML a la asignación de objetos. Utiliza anotaciones dentro de la clase de manera similar al método que uso en C# y es agradable y limpio. También puede dividir el archivo en varias clases y el ahorro de carga es un simple trazador de líneas.

En su caso, la estructura de la clase se vería así.

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 diferencia es que la matriz se guardará como esto

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

Pero usted tiene la opción de añadir (entrada = "myName") a la anotación en la que llegó el XML se guardará así abajo

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

Pero el resultado final es el mismo una vez que se carga en la matriz.

Cuestiones relacionadas