Java 在xml中逐个存储对象并将其作为ArrayList读取

Java 在xml中逐个存储对象并将其作为ArrayList读取,java,xml,xstream,Java,Xml,Xstream,我是xml对象转换的新手。我目前正在使用xstream 我的问题是,是否有任何方法可以将对象一个接一个地存储在xml中,就像在末尾的append中一样,并将它们作为数组列表读取 基本上我有一个xml文件作为 <person> <firstname>Joe</firstname> <lastname>Walnes</lastname> <phone> <code>123<

我是xml对象转换的新手。我目前正在使用xstream

我的问题是,是否有任何方法可以将对象一个接一个地存储在xml中,就像在末尾的append中一样,并将它们作为数组列表读取

基本上我有一个xml文件作为

<person>
    <firstname>Joe</firstname>
    <lastname>Walnes</lastname>
    <phone>
        <code>123</code>
        <number>1234-456</number>
    </phone>
    <fax>
        <code>123</code>
        <number>9999-999</number>
    </fax>
</person>
<person>
    <firstname>Joe</firstname>
    <lastname>Walnes</lastname>
    <phone>
        <code>123</code>
        <number>1234-456</number>
    </phone>
    <fax>
        <code>123</code>
        <number>9999-999</number>
    </fax>
</person>
我想成为一个有能力的人

List<Person> persons = (ArrayLIst<Person()>)xstream.fromXML(xml);
List persons=(ArrayLIst)xstream.fromXML(xml);

在这里使用xstream是否正确,是否有更好的方法可以实现这一点。非常感谢你的帮助

写入单个对象和读取列表将不起作用。要了解原因,请在一个文件中使用
toXml
编写几个对象,然后在另一个文件中编写对象的
列表
,并将两者进行比较

但是,一个接一个地读取单个对象并将其添加到列表中应该是相当容易的

create list
while (read object using fromXml)
  add to list
您可以使用标准Java和类。它们与对象输入和输出流一样易于使用,并且可以使用getter和setter为应保存的属性、集合以及多个对象向同一流写入任何对象。缺点是它们生成和读取的XML对于人类来说相当难以理解


如果逐个手动写入对象,还需要逐个读取对象,直到获取ArrayIndexOutOfBoundsException(检测EOF的一个有趣事件,但这就是它的记录方式)。您不能在一次调用中加载整个集合,但这里的一个简单循环似乎并不复杂,您将在最后得到您的ArrayList。

Java有JAXB,请查看它。@nvy根据建议转到此链接。JAXB很容易理解:文章中的XML片段无效,因为应该有一个根元素。这真的是您的文档还是有根元素?我仍然对您提到的方法有点困惑。。。你是说这个
List persons=new ArrayList()

while(person=(person)xstream.fromXML(xml)){

`将person添加到列表中

}`不,我的意思是您一次读取一个
person
,然后将其添加到列表中。
while(personp=(Person)xstream.fromXML(reader){persons.add(p);}行中的某些内容
但您必须尝试一下。我得到了Xstream初始化错误LOL,我现在正在与之斗争。有什么想法吗?您第一次调用fromXml时得到它吗?是的,我在实例化Xstream对象时第一次得到它……就在这里Xstream Xstream=new Xstream();Downvoter,你认为这种方法有什么错?使用标准库是“不酷”还是对你来说太容易了?我不确定是谁否决了你的答案,但我没有否决你的答案@Audrius Meškauskas.+1感谢你的努力!它解决了OP每次编写一个对象并读入一个集合的问题吗?