我使用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>
理想情况下,对于每个文档,我希望能够获得group
的集合,并为每个组收集mail
s
我不确定如何为此目的使用XStream ...是否可以实现我想用XStream做什么或者我需要JaxB?
答案 0 :(得分:1)
XStream将是“最简单的”imho - 基本上允许您快速构建一组POJO,这些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并检索相应的Groups和Mail Items。
答案 1 :(得分:0)
XStream主要用于xml的编组和解组,你可以将xml解组为java对象,然后运行这些对象并执行任务。
如果你想对数据做出“反应”,我宁愿建议使用对不同标签做出反应的sax / stax阅读器。
由于提到了JaxB,它与XStream完全相同。根据经验,我几乎可以轻松地找到XStream。但是,如果您想更详细地了解差异,请查看此帖子:http://www.stackoverflow.com/questions/4230499/java-to-xml-conversions此帖还讨论了可能与您相关的其他几种解决方案。