6

我有一个简单的 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 文件中的信息直接注入到变量名中,而不必手动解析它?我不介意使用外部库。

任何帮助表示赞赏。

4

6 回答 6

10

XStream 是一个非常棒的库。

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

您可以为您的类甚至自定义数据格式设置别名,以使 XML 文件更具可读性。

于 2009-02-01T18:41:30.503 回答
5

已经提到的解决方案(XStream和 Apache Commons Digester)的替代方案将是 Java 自己的JAXB,用于类似的通用方法,或者更适合配置的解决方案,如 Apache Commons Configuration或 Java 的Preferences API

于 2009-02-01T19:01:06.657 回答
4

我实际上会推荐 Apache Digester,因为如果您的类是 bean,它只会处理将 XML 读入其中的问题。

于 2009-02-01T18:48:03.360 回答
2

您也可以使用 Spring - 虽然如果它用于手机游戏,对于一个类来说可能有点矫枉过正!

于 2009-02-01T21:37:39.260 回答
2

我最近开始使用 Simple 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>

但是您可以选择将 (entry="myName") 添加到 XML 将像这样保存下来的注释中

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

但是一旦加载到数组中,最终结果是相同的。

于 2014-01-16T16:07:30.567 回答
1

使用 JAXB。它包含在从 Java 1.6 开始的 JDK 中。

于 2013-12-23T20:07:37.557 回答