0

我使用 Spring 批处理来解析 XML 文档并对这些 XML 文档中包含的数据进行操作。

我有如下文件:

<rootDoc>
  <group id="13001L000001" box="13000B000001" operator="jsmith">
    <mail numMail="3A06049714560"/>
    <mail numMail="3A06049714561"/>
    <mail numMail="3A06049714562"/>
    <mail numMail="3A06049714565"/>
  </group>
  <group id="13001L000002" box="13000B000001" operator="jsmith">
    <mail numMail="3A06049714570"/>
    <mail numMail="3A06049714571"/>
    <mail numMail="3A06049714572"/>
    <mail numMail="3A06049714575"/>
  </group>
</rootDoc>

理想情况下,对于每个文档,我希望能够获得groups 的集合,并为每个组获得 s 的mail集合

我不知道如何使用 XStream 来达到这个目的......是否可以使用 XStream 实现我想要做的事情,或者我是否需要 JaxB?

4

2 回答 2

1

XStream 将是“最简单”的恕我直言 - 本质上允许您快速构建一组 POJO 来映射文档,然后使用 XStream 配置将文档解析为它们。例如对于 rootDoc;

import java.io.Serializable;
import java.util.List;

public class Root implements Serializable {

private List<Group> groups;

//setters and getters...

}

为集团

import java.io.Serializable;
import java.util.List;

public class Group implements Serializable {

private String id;

private String box;

private String operator;

private List<Mail> mailItems;

//setters and getters...

}

和邮件项目

import java.io.Serializable;

public class Mail implements Serializable {

private String numMail;

//setters and getters...

}

要为此对象设置 XStream,可以使用以下配置

    XStream xstream = new XStream(new StaxDriver());
    xstream.alias("mail", Mail.class);
    xstream.useAttributeFor(Mail.class,"numMail");
    xstream.alias("group", Group.class);
    xstream.useAttributeFor(Group.class, "box");
    xstream.useAttributeFor(Group.class, "id");
    xstream.useAttributeFor(Group.class, "operator");
    xstream.addImplicitCollection(Group.class, "mailItems");
    xstream.alias("rootDoc", Root.class);
    xstream.addImplicitCollection(Root.class, "groups");

并用它来阅读文档

Root result = (Root) xstream.fromXML(...source);

现在您可以像使用任何父对象一样使用 Root POJO 并检索相应的组和邮件项。

于 2013-01-04T16:17:27.263 回答
0

XStream 主要用于 xml 的编组和解组,您可以将 xml 解组为 java 对象,然后运行这些对象并完成您的任务。

如果您想对数据“做出反应”,我宁愿建议使用对不同标签做出反应的 sax/stax 阅读器。

由于提到了 JaxB,它的作用几乎与 XStream 相同。从我的经验来看,我完全发现 XStream 更容易使用。但是,如果您想详细了解这些差异,请查看这篇文章: http: //www.stackoverflow.com/questions/4230499/java-to-xml-conversions这篇文章还讨论了其他几种可能的解决方案与您相关。

于 2013-01-03T14:17:15.177 回答