JAXB MOXy将多个对象迭代映射到单个XML

时间:2012-07-03 09:57:25

标签: java xml jaxb eclipselink moxy

我正在使用JAXB MOXy将我的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>

我现在要做的是将对象的多次迭代保存到同一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>
 <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'的列表,我可以简单地编组列表吗?是否会生成一个单独的xml文件,每个NotificationTemplate对象都作为一个单独的“XML对象”?

NB。同样,当我解组XML文件时,我希望生成Type'NotificationTemplate'列表?

1 个答案:

答案 0 :(得分: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;
}