以下は、JAXB ( JSR-222 ) でこれを行う方法です。Java SE 6 には実装が含まれています。EclipseLink MOXyなどの他の実装もあります(私は技術リーダーです)。
簡潔な答え
注釈または XML スキーマを使用して、JAXB で次の API 呼び出しを使用できます。
Sitemap sitemap = JAXB.unmarshal(xml, Sitemap.class);
長い答え
以下は、より詳細な例です。
サイトマップ
クラスを少し変更しました。クラスが何なのかわからなかっUrl
たので、 に変更しましたjava.net.URL
。ドメイン モデルでは注釈が必要ないことに注意してください。
package forum10854001;
import java.net.URL;
import java.util.List;
public class Sitemap {
private List<URL> urls;
public List<URL> getUrls() {
return urls;
}
public void setUrls(List<URL> urls) {
this.urls = urls;
}
}
デモ
短い回答で使用されているコードの代わりに、JAXBContext
. JAXBContext は、初期化されたすべてのメタデータを表すスレッド セーフなオブジェクトです。Marshaller
およびオブジェクト プロバイダはUnmarshaller
、クラスに追加の柔軟性を提供しますJAXB
。
以下のコードは、XML を読み取り、書き戻す方法を示しています。
package forum10854001;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Sitemap.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource xml = new StreamSource("src/forum10854001/input.xml");
JAXBElement<Sitemap> jaxbElement = unmarshaller.unmarshal(xml, Sitemap.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}
input.xml/出力
<?xml version="1.0" encoding="UTF-8"?>
<sitemap>
<urls>http://www.eclipse.org/eclipselink/moxy.php</urls>
<urls>http://jaxb.java.net</urls>
</sitemap>
詳細については