JAXB (JSR-222)を使用して、必要に応じて処理できる Java オブジェクトに XML を読み込むことができます。JAXB の実装は、Java SE 6 以降の JDK/JRE に含まれています。以下に例を示します。
設定
JAXB は例外による構成です。これは、XML 表現をデフォルトとは異なるものにしたい場合にのみ注釈を追加する必要があることを意味します (参照: http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html )。
package forum12448687;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Config {
private List<Art> art;
}
美術
package forum12448687;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Art {
private String name;
private String first;
@XmlElementWrapper
@XmlElement(name="set")
private List<String> alist;
}
デモ
次のコードは、XML をオブジェクトから読み取り、XML に書き戻す方法を示しています。
package forum12448687;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Config.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum12448687/input.xml");
Config config = (Config) unmarshaller.unmarshal(xml);
Marshaller marshaller= jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(config, System.out);
}
}
input.xml/出力
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config>
<art>
<name>x</name>
<first>y</first>
<alist>
<set>1</set>
<set>2</set>
<set>3</set>
</alist>
</art>
<art>
<name>z</name>
<first>a</first>
<alist>
<set>1</set>
<set>2</set>
<set>3</set>
</alist>
</art>
</config>