7

次のようなノードを持つXMLドキュメントを解析しています。

<objects>
  <dog>
    <data1>...</data1>
    <data2>...</data2>
    <data3>...</data3>
  </dog>
  <cat>
    <data1>...</data1>
    <data2>...</data2>
    <data3>...</data3>
  </cat>
</objects>

要素data1、data2、data3は常に一貫しています。親タグのみが異なります。私のオブジェクトモデルには、これらすべてのケースを表す単一のオブジェクトがあります。要素の名前を事前に知らなくても、JAXBにこのケースを処理させるにはどうすればよいですか?

@XMLAnyElementはすべてのオブジェクトに一致しますが、適切なタイプのオブジェクトを作成しません。オブジェクトの代わりにNodeオブジェクトのリストを取得します。私のオブジェクトは現在次のようになっています。

public class MyObject {
    protected String otherData;

    @XmlAnyElement
    @XmlElementWrapper(name = "objects")
    protected List<MyChildObject> childObjects;
}

public class MyChildObject {
    protected String data1;
    protected String data2;
    protected String data3;
}

<object type="dog">要素を使用するように着信XML形式を変更する以外に、このケースを処理する方法はありますか?

4

2 に答える 2

0

継承を使用できます:

@XmlRootElement(name = "dog")
public class MyDogObject extends MyChildObject {
    //nothing here
}

@XmlRootElement(name = "cat")
public class MyCatObject extends MyChildObject {
    //nothing here
}

このようにして、同じオブジェクト タイプを処理しながらMyChildObject、XML 構造を柔軟に制御できます。もう 1 つの利点は、将来的に特定の犬/猫の XML ノードを定義する必要があることです。それらは対応するサブクラスにマッピングできますが、他のクラスにはマッピングできません。

于 2009-05-07T15:06:16.233 に答える