おそらく、このような質問がなされたのでしょう。XML から Java クラスへの変換は初めてです。私はこのようなxmlを持っています:
<Root>
<Book name="harel" price="5" />
<Book name="xml" price="9" />
</Root>
このような構造に対して Java クラスを動的に生成する方法はありますか? 小さな修正、xml の xsd がありません
注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB(JSR-222)エキスパートグループのメンバーです。
このような構造のJavaクラスを動的に生成する方法はありますか?
JAXB実装は、XMLスキーマからJavaモデルを生成する機能を提供します。Java SE 6以降のJDKに含まれているリファレンス実装は、次の場所で入手できます。
<JAVA_HOME>/bin/xjc
XMLスキーマからオブジェクトモデルを生成する例は、次の場所にあります。
ちょっとした修正ですが、xml用のxsdがありません
XMLスキーマがない場合は、XMLドキュメントからXMLスキーマを生成するユーティリティを見つけることができます。
または、コードから始めます。
コードから開始
コードから始めて、モデルに注釈を付けて、既存のXML構造にマップすることもできます。
根
package forum11213872;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="Root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="Book")
private List<Book> books;
}
本
package forum11213872;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Book {
@XmlAttribute
private String name;
@XmlAttribute
private int price;
}
デモ
package forum11213872;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum11213872/input.xml");
Root root = (Root) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
input.xml / Output
<Root>
<Book name="harel" price="5" />
<Book name="xml" price="9" />
</Root>
はい、castor フレームワーク (http://www.castor.org/) または jaxb (http://www.oracle.com/technetwork/articles/javase/index-140168.html) を参照してください。
Java Castor を試してみてください。xsd を指定してオブジェクトに変換できます。Eclipse 用のプラグインもあります。
XStreamを見てください。
XML と Java の間、および Java と XML の間の変換を行います。