5

私は次のものを持っているとしましょう:

@XmlRootElement(name = "foo1")
public class Foo1
{
    @XmlElementWrapper( name="answerList" )
    @XmlElement( name="answer" )
    private List<String> answerList;
}

Foo1 インスタンスをマーシャリングすると、次のようになります。

<foo1>
    <answerList>
        <answer>myAnswer1</answer>
        <answer>myAnswer2</answer>
    </answerList>
</foo1>

さて、次のプロパティがあるとします。

private List<List<String>> answerListsList;

上記のプロパティに注釈を付けて、次の XML を取得するにはどうすればよいでしょうか (もちろん、文字列のリストを保持する新しいクラスを作成する必要はありません)。

<foo1>
    <answerLists>
        <answerList>
            <answer>row1 myAnswer1</answer>
            <answer>row1 myAnswer2</answer>
        </answerList>
        <answerList>
            <answer>row2 myAnswerA</answer>
            <answer>row2 myAnswerB</answer>
        </answerList>
    <anserLists>
</foo1>

編集:

新しいクラスを作成したくない理由は、あまり多くのクラスを作成しないようにするためです。たまたま異なる要素名を使用している可能性のあるすべての List of Lists of Strings に対して新しいクラスを作成することは、私の意見では良い設計ではありません。

必要に応じて、そのクラスをさまざまな要素名と要素ラッパーにマーシャリングできる限り、答えとして新しいクラスを作成することを検討できます。たとえば、そのクラスは次の XML を表現できる必要があります。

<answerLists>
    <answerList>
        <answer>row1 myAnswer1</answer>
        <answer>row1 myAnswer2</answer>
    </answerList>
    <answerList>
        <answer>row2 myAnswerA</answer>
        <answer>row2 myAnswerB</answer>
    </answerList>
<anserLists>

また

<myLists>
    <myList>
        <item>row1 d1</item>
        <item>row1 d2</item>
    </myList>
    <myList>
        <item>row2 dA</item>
        <item>row2 dB</item>
    </myList>
</myLists>
4

1 に答える 1

3

新しいクラスを作成しないと、必要なXMLを取得できません。

私はこのクラスを書きました:

@XmlRootElement( name="foo1" )
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo1<T>
{
    @XmlElementWrapper( name="answerList" )
    @XmlElement( name="answer" )
    List<T> answerList = new ArrayList<T>();
}

リスト内のリストの使用法は次のとおりです。

Foo1<Foo1<String>> ff = new Foo1<Foo1<String>>();  

ただし、出力XMLは希望どおりではありません。取得したいXMLは、新しいクラスを作成せずに作成できないためです。

于 2012-08-21T09:40:45.517 に答える