2009-02-01 50 views
6

我有一個簡單的Java類,它看起來是這樣的:
如何輕鬆地將基於XML的配置文件加載到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文件中的信息直接注入變量名稱,而不必手動解析它?我不介意使用外部庫。

任何幫助表示讚賞。

回答

10

XStream是一個非常棒的庫。

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

您可以設置爲您的類的別名,甚至自定義的數據格式,使XML文件的可讀性。

+0

我使用Xstream進行了很多操作。我喜歡它很容易擴展,以便讓文件看起來像你想要的樣子。用於Commons配置的 – 2009-02-02 01:53:06

4

我實際上會推薦Apache Digester,因爲如果你的類是beans,它只會處理讀入它們的XML。

2

你也可以使用Spring--儘管如果它適用於手機遊戲,那麼它對於一個類可能有點矯枉過正!

1

使用JAXB。它包含在從Java 1.6開始的JDK中。

2

我最近開始使用簡單的http://simple.sourceforge.net/進行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> 

但你必須加入到裏面傳來XML將註釋的選項(項=「MYNAME」)像這樣保存下來

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

但是最終的結果是一樣的,一旦它被加載到數組中。

相關問題