1

JAXBMOXyを使用してJavaオブジェクトをXMLにマップしています。これまで、一度に1つのオブジェクトを変換するだけで、その単語は問題ありませんでした。したがって、出力XMLは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<NotificationTemplateXML template-id="1">
   <template-subject>Test Subject</template-subject>
   <template-text>Test Text</template-text>
</NotificationTemplateXML>

私が今やろうとしているのは、オブジェクトの複数の反復を同じXM​​Lファイルに保存して、次のようにすることです。

<?xml version="1.0" encoding="UTF-8"?>
 <NotificationTemplateXML template-id="1">
    <template-subject>Test Subject</template-subject>
    <template-text>Test Text</template-text>
 </NotificationTemplateXML>
 <NotificationTemplateXML template-id="2">
    <template-subject>Test Subject</template-subject>
    <template-text>Test Text</template-text>
 </NotificationTemplateXML>
 <NotificationTemplateXML template-id="3">
    <template-subject>Test Subject</template-subject>
    <template-text>Test Text</template-text>
 </NotificationTemplateXML>

私のオブジェクトマッピングは次のようになります。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="NotificationTemplateXML")
public class NotificationTemplate {

    @XmlAttribute(name="template-id")
    private String templateId;
    @XmlElement(name="template-subject")
    private String templateSubject;
    @XmlElement(name="template-text")
    private String templateText;

タイプ「NotificationTemplate」のリストがあると仮定すると、リストを単純にマーシャリングできますか?これにより、各NotificationTemplateオブジェクトが個別の「XMLオブジェクト」として単一のxmlファイルが生成されますか?

NB。同様に、XMLファイルをアンマーシャルすると、タイプ'NotificationTemplate'のリストが生成されることを期待していますか?

4

1 に答える 1

1

以下は、いくつかの異なるオプションです。

オプション#1-無効なXMLドキュメントを処理する

XMLドキュメントには単一のルート要素があるため、入力は無効です。以下は、このタイプの入力を処理する方法について@npeによって与えられた回答です。

オプション#2-有効なXMLドキュメントを作成する

XMLを有効なドキュメントに変換して処理することをお勧めします。

ルート要素を含むXMLドキュメント

ルート要素を追加してXMLドキュメントを変更しました。

<?xml version="1.0" encoding="UTF-8"?>
<NotificationTemplateXMLList>
    <NotificationTemplateXML template-id="1">
        <template-subject>Test Subject</template-subject>
        <template-text>Test Text</template-text>
     </NotificationTemplateXML>
     <NotificationTemplateXML template-id="2">
        <template-subject>Test Subject</template-subject>
        <template-text>Test Text</template-text>
     </NotificationTemplateXML>
     <NotificationTemplateXML template-id="3">
        <template-subject>Test Subject</template-subject>
        <template-text>Test Text</template-text>
     </NotificationTemplateXML>
<NotificationTemplateXMLList>

NotificationTemplateXMLList

新しいルート要素にマップする新しいクラスをドメインモデルに導入しました。

@XmlRootElement(name="NotificationTemplateXMLList")
@XmlAccessorType(XmlAccessType.FIELD)
public class NotificationTemplates {

     @XmlElement(name="NotificationTemplateXML")
     private List<NotificationTemplate>  notificationTemplates;
}
于 2012-07-03T10:43:08.993 に答える