2009-02-01 28 views
6

Tôi đã có một lớp java đơn giản mà trông giống như sau:
Làm thế nào để dễ dàng tải một tệp cấu hình dựa trên XML vào một lớp 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"; 
      ... 
} 



Tôi muốn đọc thông tin này từ một tập tin XML đơn giản mà trông giống như sau:

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

Có cách nào dễ dàng để đưa thông tin từ tệp xml trực tiếp vào tên biến thay vì phải phân tích cú pháp thủ công không? Tôi không ngại sử dụng thư viện bên ngoài.

Mọi trợ giúp đều được đánh giá cao.

Trả lời

10

XStream thực sự là thư viện tuyệt vời cho điều này.

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

Bạn có thể thiết lập bí danh cho lớp học của bạn và thậm chí cả các định dạng dữ liệu tùy chỉnh để làm cho các tập tin XML dễ đọc hơn.

+0

Tôi sử dụng Xstream cho một số thứ. Tôi thích rằng nó rất dễ dàng để mở rộng để bạn làm cho các tập tin trông theo cách bạn muốn. –

4

Tôi thực sự khuyên bạn nên sử dụng Apache Digester, vì nếu các lớp của bạn là đậu, nó sẽ chỉ xử lý việc đọc XML vào chúng.

5

Alternatives các giải pháp đã được đề cập (XStream và Apache Commons Digester) sẽ là Java riêng JAXB cho một cách tiếp cận chung tương đương, hoặc các giải pháp phù hợp hơn đối với cấu hình như Apache Commons Configuration hoặc Java Preferences API.

+0

+1 dành cho cấu hình Commons. – Viccari

2

Bạn cũng có thể sử dụng Spring - mặc dù nó có thể hơi quá mức đối với một lớp nếu nó cho một trò chơi dành cho thiết bị di động!

1

Sử dụng JAXB. Nó được bao gồm trong JDK bắt đầu với Java 1.6.

2

Gần đây tôi đã bắt đầu sử dụng Simple http://simple.sourceforge.net/ cho XML để ánh xạ đối tượng. Nó sử dụng chú thích trong lớp tương tự như phương pháp tôi sử dụng trong C# và đẹp và sạch. Bạn cũng có thể chia nhỏ tệp thành nhiều lớp và tải lưu là một lớp lót đơn giản.

Trong trường hợp của bạn, cấu trúc Lớp sẽ trông như thế nào.

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 
}  

Lưu ý một sự khác biệt là mảng của bạn sẽ được lưu như thế này

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

Nhưng bạn bạn có tùy chọn thêm (entry = "Myname") để chú thích trong đó đến XML sẽ được lưu như thế này

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

Nhưng kết quả cuối cùng là như nhau khi nó được tải vào mảng.

Các vấn đề liên quan