JAXB 解组多个对象,不是 List<CustomObject>
JAXB unmarshal multiple objects, NOT List<CustomObject>
我正在尝试汇总 XML 包含多个对象但不包含对象列表的文件。我没有存储列表,因为我需要非常频繁地附加单个对象。
这是通过编组 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();
}
}
我需要解组所有消息。
你能给我一些想法吗?
首先拆分您的 XML 文件。然后您可以将每个部分解组为消息对象实例。
您也可以考虑使用包含消息列表的消息存储。使用列表不应产生负面影响。
您的 XML 将如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<messsages>
<message>
...
</message>
</messages>
这是一个有效的 XML,可以使用 JAXB 一步解组。
如果您正在处理大量消息,则不应将它们序列化为 XML。如果目的是持久化它们,那么您应该实施另一种更灵活的策略,并且考虑到持久化数据时涉及的问题。
那是无效的 XML - 事实上它看起来像多个 XML 文件连接在一起:XML needs a single root element(事实上,重复 XML Prolog 可能是也无效)。
列表设计 可以非常频繁地附加单个对象,所以这应该没问题。
我正在尝试汇总 XML 包含多个对象但不包含对象列表的文件。我没有存储列表,因为我需要非常频繁地附加单个对象。
这是通过编组 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();
}
}
我需要解组所有消息。 你能给我一些想法吗?
首先拆分您的 XML 文件。然后您可以将每个部分解组为消息对象实例。
您也可以考虑使用包含消息列表的消息存储。使用列表不应产生负面影响。 您的 XML 将如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<messsages>
<message>
...
</message>
</messages>
这是一个有效的 XML,可以使用 JAXB 一步解组。 如果您正在处理大量消息,则不应将它们序列化为 XML。如果目的是持久化它们,那么您应该实施另一种更灵活的策略,并且考虑到持久化数据时涉及的问题。
那是无效的 XML - 事实上它看起来像多个 XML 文件连接在一起:XML needs a single root element(事实上,重复 XML Prolog 可能是也无效)。
列表设计 可以非常频繁地附加单个对象,所以这应该没问题。