これは、Java オブジェクトが XML との間でどのように変換されるかを定義するための Java 標準である JAXB (Java Architecture for XML Binding) のデフォルトの動作です。
他の誰かが提供した XSD から始める場合は、JDK に付属の xjc ツールを使用してクラスを生成できます。
> xjc vendor.xsd
how-to-generate-jaxb-classes-from-xsd を参照してください
デフォルトでは、これにより、XSD で定義された要素を表すクラスの「生成された」パッケージが作成されます。XML の最上位要素が VendorDocument の場合、次のコードで入力ファイルを操作できます。
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import generated.VendorDocument;
public class VendorMain {
public static void main(String[] args) throws JAXBException, IOException {
// create JAXB context
JAXBContext context = JAXBContext.newInstance(VendorDocument.class);
// unmarshal document from file
Unmarshaller um = context.createUnmarshaller();
VendorDocument vendorDoc = (VendorDocument) um.unmarshal(new FileReader("vendor.xml"));
//Check what got read in by writing it out. Will not have unknown tags.
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(vendorDoc, new File("output.xml"));
}
}
vendor.xml 入力ファイルに余分なタグと属性を追加すると、それらは単純に無視され、ドキュメントの必要な部分に引き続きアクセスできることがわかります。将来 XSD に追加されるだけで、削除されない限り、問題はないはずです。
上記のコード スニペットは、このチュートリアルから改作されました。