【问题标题】:Storing Object one by one in an xml and reading them as an ArrayList将对象一一存储在 xml 中并将它们作为 ArrayList 读取
【发布时间】:2013-02-15 19:20:10
【问题描述】:

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

我的问题是有什么方法可以将对象一个一个地存储在一个 xml 中,就像最后附加的那样,并在读取时将它们作为数组列表读取。

基本上我有一个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);

在这里使用 xstream 是正确的吗,有什么更好的方法可以用来实现这一点。非常感谢您的帮助!

【问题讨论】:

  • Java 有 JAXB,研究一下。
  • @nvy 建议转到此链接。 JAXB 很容易理解:jaxb.java.net/tutorial/…
  • 您帖子中的 XML 片段无效,因为应该有一个根元素。这真的是你的文档还是有根元素?

标签: java xml xstream


【解决方案1】:

编写单个对象和读取列表是行不通的。要了解原因,请在一个文件中使用 toXml 写入一些对象,并在另一个文件中写入对象的 List 并比较两者。

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

create list
while (read object using fromXml)
  add to list

【讨论】:

  • 我对你提到的方法还是有点迷茫...你的意思是这个List&lt;Person&gt; persons = new ArrayList&lt;Person&gt;();
    Person person;
    while(person = (Person)xstream.fromXML(xml)){
    `加人列出&lt;br/&gt; }`
  • 不,我的意思是您一次阅读一个Person 并将其添加到列表中。 while(Person p = (Person)xstream.fromXML(reader) { persons.add(p); } 上的东西,但你必须尝试一下。
  • 我收到 Xstream InitializationError LOL,我现在正在努力解决这个问题。有什么想法吗?
  • 第一次调用 fromXml 时是否得到它?
  • 是的,当我实例化我的 xstream 对象时,我第一次得到它.....就在这里 XStream xstream = new XStream();
【解决方案2】:

您可以使用标准 Java XMLEncoderXMLDecoder 类。它们与对象输入和输出流一样易于使用,并且可以将任何带有 getter 和 setter 的对象写入应保留的属性,也可以将集合以及多个对象写入同一流。缺点是它们生成和读取的 XML 对人类来说相当难以理解。

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

【讨论】:

  • 反对者,您认为这种方法有什么问题?使用标准库只是“不酷”还是对您来说太容易了?
  • 我不确定谁对你的答案投了反对票,但我没有对你的答案投反对票@Audrius Meškauskas。为您的努力 +1!
  • 它是否解决了 OP 一次写入一个对象并读入集合的问题?
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 2012-03-22
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2012-04-20
  • 2023-03-10
相关资源
最近更新 更多