Unmarshalで2つのノードが!?
"読み込みは、Ummarshaller#unmarshal を使用します。大体コードが想像できますよね!?"
なんて書いたんですが、実際やってみると、少し問題が。。
前述のXMLスキーマ形式の次のようなデータ・ファイル
<?xml version = '1.0' encoding = 'UTF-8'?> <bookData xmlns="http://jkidd.com/book"> <book title="JAX-Bプログラミング" price="12000"/> <book title="JAX-Bプログラミング応用編" price="25000"/> </bookData>
に対して、以下のコードで読み込みしたら、
//読み込み Unmarshaller unmarshaller = context.createUnmarshaller(); Object root = unmarshaller.unmarshal( file ); if (root instanceof BookData) { List bookList = ((BookData)root).getBook(); for (int i = 0; i < bookList.size(); i++) { BookDataType.Book book = (BookDataType.Book) bookList.get(i); System.out.println( book.getTitle() + ": " + book.getPrice() + "円" ); } }
結果は次のとおりでした。
どうも、Unmarshalの際に、Attribute単位でノードができるようで、そのため、bookデータが2つずつ構成されるようです。うーん、これってどうすると良いのでしょう?
JAX-Bプログラミング: 12000円
JAX-Bプログラミング: 12000円
JAX-Bプログラミング応用編: 25000円
JAX-Bプログラミング応用編: 25000円