我有一个简单的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文件中的信息直接注入变量名称,而不必手动解析?我不介意使用外部库。
感谢任何帮助。
答案 0 :(得分:10)
答案 1 :(得分:5)
已经提到的解决方案(XStream和Apache Commons Digester)的替代方案将是Java自己的JAXB,用于类似的通用方法,或者更适合于像Apache Commons {{}的配置的解决方案。 3}}或Java的Configuration。
答案 2 :(得分:4)
我实际上会推荐Apache Digester,因为如果你的类是bean,它只会把XML读入它们。
答案 3 :(得分:2)
你也可以使用Spring - 虽然如果一部手机用于手机游戏,它可能有点过分了!
答案 4 :(得分: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>
但是一旦加载到数组中,最终结果就是一样。
答案 5 :(得分:1)
使用JAXB。它从Java 1.6开始包含在JDK中。