5

私はいくつかのXMLデータを読んでいます(あなたがそれらに精通しているならFXGファイル)。

データの一部にはさまざまなタグ名があります。

<varying_name1 scaleX="1.0046692" x="177.4" y="74.2"/>
<varying_name2  scaleX="1.0031128" x="171.9" y="118.9"/>    

さまざまなタグ名セグメント内のデータを表すために、Transformsという名前のクラスを作成しました。私が持っているデータを保持するための私のJAXBクラスでは:

@XmlAnyElement(lax=true)    
@XmlJavaTypeAdapter(TransformAdapter.class)    
protected List<Transform> transforms;

アダプターで、データのマーシャリングを解除しようとしています。

JAXBContext context = JAXBContext.newInstance(Transform.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Transform result = (Transform) unmarshaller.unmarshal(v);

ただし、要素のルート名が異なるため、コードはここで例外をスローします。定数ではありません。私は得る:

unexpected element (uri:"http://ns.adobe.com/fxg/2008", local:"m6_mc"). Expected elements are (none)

ルート要素が期待した名前を持っているかのように、データをマーシャリング解除するにはどうすればよいですか?

4

1 に答える 1

7

デフォルトでは、aaa JAXB(JSR-222)実装は、ルート要素に基づいてアンマーシャリングするクラスを決定します。@XmlRootElementこれは、または@XmlElementDeclアノテーションを介して提供されるメタデータと一致します。

または、クラスパラメータを受け取るアンマーシャリングメソッドの1つです。これにより、どのクラスにアンマーシャリングするかがJAXBに通知されます。アンマーシャルの結果はJAXBElement、Javaオブジェクトに加えて、必要に応じてルート要素情報を含むインスタンスになります。

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = unmarshaller.unmarshal(v, Transform.class).getValue();
于 2012-12-11T20:11:30.707 に答える