我正在尝试包含多个对象的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();
}
}
我需要解组所有消息。 你能告诉我一些如何做的想法吗?
答案 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也可能是无效的。)
列表设计以频繁附加单个对象,所以这应该没问题。