Как легко загрузить файл конфигурации на основе XML в класс Java?

У меня есть простой класс 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";
            ... 
}



Я хотел бы прочитать эту информацию из простого XML-файла, который выглядит примерно так:

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

Есть ли простой способ ввести информацию из файла xml непосредственно в имена переменных вместо того, чтобы анализировать ее вручную? Я не против использования внешней библиотеки.

Любая помощь приветствуется.


person JoshuaD    schedule 01.02.2009    source источник


Ответы (6)


XStream — действительно отличная библиотека именно для этого.

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

Вы можете настроить псевдонимы для своего класса и даже пользовательские форматы данных, чтобы сделать файл XML более читабельным.

person Community    schedule 01.02.2009
comment
Я использую Xstream для нескольких целей. Мне нравится, что его легко расширить, чтобы файл выглядел так, как вы хотите. - person Jay R.; 02.02.2009

Альтернативы уже упомянутым решениям (XStream и Apache Commons Digester) будет собственным JAXB Java для сопоставимый общий подход или решения, более адаптированные к конфигурации, такие как Apache Commons Configuration или Java API настроек.

person Fabian Steeg    schedule 01.02.2009

На самом деле я бы рекомендовал Apache Digester, поскольку, если ваши классы являются bean-компонентами, он будет просто обрабатывать чтение XML в них.

person Uri    schedule 01.02.2009

Вы также можете использовать Spring — хотя это может быть немного излишним для одного класса, если это для мобильной игры!

person Fortyrunner    schedule 01.02.2009

Недавно я начал использовать Simple http://simple.sourceforge.net/home.php для объекта XML. отображение. Он использует аннотации внутри класса аналогично методу, который я использую в C#, и он приятный и чистый. Вы также можете разбить файл на несколько классов, а загрузка сохранения — это простая однострочная запись.

В вашем случае структура класса будет выглядеть так.

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
} 

Обратите внимание, что одно отличие состоит в том, что ваш массив будет сохранен следующим образом.

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

Но у вас есть возможность добавить (entry="myName") к аннотации, в которой появился XML, который будет сохранен следующим образом

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

Но конечный результат тот же, как только он загружен в массив.

person Paul P M    schedule 16.01.2014

Используйте JAXB. Он включен в JDK, начиная с Java 1.6.

person user3130667    schedule 23.12.2013