JAXB解组多个对象,NOT List <customobject> </customobject>

时间:2015-03-26 08:44:13

标签: java xml jaxb unmarshalling

我正在尝试包含多个对象的XML文件,而不是对象列表。我没有存储List,因为我需要经常附加单个对象。

以下是通过编组XML生成的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
    <datetime>2015-03-26T10:33:52.540+02:00</datetime>
    <id>1</id>
    <rawChat>
        <members_ids>1</members_ids>
        <members_ids>2</members_ids>
    </rawChat>
    <sender>
        <id>1</id>
        <username>teso</username>
    </sender>
    <text>hello</text>
</message>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
    <datetime>2015-03-26T10:38:59.576+02:00</datetime>
    <id>2</id>
    <rawChat>
        <members_ids>1</members_ids>
        <members_ids>2</members_ids>
    </rawChat>
    <sender>
        <id>1</id>
        <username>teso</username>
    </sender>
    <text>msg2</text>
</message>

以下是我如何整理它:

public void marshal(Message message) {
        try {
            JAXBContext jc = JAXBContext.newInstance(Message.class);
            Marshaller m = jc.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            m.marshal(message, new FileOutputStream("messages.xml", true));
            m.marshal(message, System.out);
        } catch (JAXBException | IOException e) {
            e.printStackTrace();
        }
    }

我需要解组所有消息。 你能告诉我一些如何做的想法吗?

2 个答案:

答案 0 :(得分:0)

首先拆分XML文件。然后,您可以将每个部分解组为消息对象实例。

您还可以考虑使用包含Message列表的消息存储库。使用列表不应该产生负面影响。 你的XML看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<messsages>
  <message>
    ...
  </message>
</messages>

这是一个有效的XML,只需一步即可通过JAXB解组。 如果您使用的是大量消息,则不应将它们序列化为XML。如果目的是坚持他们,那么你应该更灵活地实施另一个策略,并考虑到持久化数据时所涉及的问题。

答案 1 :(得分:0)

这不是有效的XML - 事实上它似乎连接了多个XML文件:XML needs a single root element(事实上,重复XML Prolog也可能是无效的。)

列表设计以频繁附加单个对象,所以这应该没问题。