XML を Java オブジェクトに変換しているので、 JAXB (JSR-222)実装を使用してこれを行う方法を示します。JAXB 実装は、Java SE 6 以降の JDK/JRE に含まれています。
NEARBOXID
要素の内容をスペースで区切るように変更することをお勧めします。
<NEARBOXID>2 3 4 5</NEARBOXID>
は、XML スキーマの次のエントリに対応します。これは、スペースで区切られた文字列ではなく、スペースで区切られた int 値が要素に含まれていることを検証できることを意味します。
<xs:element name="NEARBOXID" minOccurs="0">
<xs:simpleType>
<xs:list itemType="xs:int"/>
</xs:simpleType>
</xs:element>
設定
@XmlList
次に、JAXB の注釈を使用して要素をマップできます(参照: http://blog.bdoughan.com/2010/09/jaxb-collection-properties.html )。
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Config {
@XmlElement(name="BOXID")
private int boxId;
@XmlElement(name="LENGTH")
private int length;
@XmlElement(name="NEARBOXID")
@XmlList
private int[] nearBoxIds;
}
構成
以下のオブジェクトは、XML ドキュメントのルートにマップされます。
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="CONFIGURATION")
@XmlAccessorType(XmlAccessType.FIELD)
public class Configuration {
@XmlElement(name="CONFIG")
private List<Config> configs;
}
デモ
以下は、すべてが機能することを証明するデモ コードです。
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Configuration.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum14305301/input.xml");
Configuration configuration = (Configuration) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(configuration, System.out);
}
}
input.xml/出力
以下は、デモ コードの実行に対する入力と出力です。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CONFIGURATION>
<CONFIG>
<BOXID>1</BOXID>
<LENGTH>100</LENGTH>
<NEARBOXID>2 3 4 5</NEARBOXID>
</CONFIG>
<CONFIG>
<BOXID>2</BOXID>
<LENGTH>200</LENGTH>
<NEARBOXID>1 8</NEARBOXID>
</CONFIG>
</CONFIGURATION>