2012-01-20 15 views
4

多くのオブジェクトを1つのxmlファイルにマーシャリングする必要があります。私のMarshallerが各オブジェクトの前に余分に<?xml version="1.0" ?>を追加することを主張する以外は、これはうまくいきます。多くのオブジェクトを1つのファイルにマーシャリングする

  1. 多くのオブジェクトを同じファイルにマーシャリングするには、どのような方法が適していますか?
  2. 他に何もない場合、これらの無関係のxml宣言を取り除く最良の方法は何ですか?

私の現在のコード:

JAXBContext jc = JAXBContext.newInstance(relevantClasses); 
Marshaller m = jc.createMarshaller(); 

XMLOutputFactory xof = XMLOutputFactory.newFactory(); 
XMLStreamWriter xsw = xof.createXMLStreamWriter(Channels.newOutputStream(fileWriteChannel), "UTF-8"); 

xsw.writeStartDocument("UTF-8", "1"); 

m.marshal(object1, xsw); 
m.marshal(object2, xsw); 

xsw.close(); 

これは素晴らしい作品、と私は期待し<object1><object2>データを取得...それだけで、各オブジェクトの前に追加<?xml version="1.0" ?>を持っています。

答えて

6

XMLドキュメントには常に1つのルート要素があるため、複数のオブジェクトを1つのファイルにマーシャリングすることで有効なXMLにはなりません。

Object1要素とObject2要素を持つルートオブジェクトが1つあり、このルートオブジェクトをマーシャリングする必要があります。

そうでない場合は、Marshaller API docは言う:

サポートされているプロパティ

[...]

jaxb.fragmentを - 値はjava.lang.Booleanの でなければなりません。このプロパティは、かどうかを判定Marshallerはドキュメントレベルのイベントを生成しません。プロパティが指定されていない場合は、 のデフォルトはfalseです。マーシャラーは発生しませんXMLStreamConstants -

[...]

マーシャル(オブジェクト、てXMLStreamWriter):このプロパティは trueに設定されている場合 - このプロパティは、マーシャルAPIを使用している をによって異なる意味を持っています.START_DOCUMENTおよび XMLStreamConstants.END_DOCUMENTイベント。

+0

のようにルートを追加すべきだと思いますか? – anon58192932

0

私はあなたがルートオブジェクトを取得するにはどうすればよい

@XmlRootElement(name = "Name") 
public class EntityName { 

} 
関連する問題