2013-01-03 30 views
0

我使用Spring批處理來解析XML文檔並對這些XML文檔中包含的數據執行操作。使用Spring批處理將複雜XML解析爲java

我有文件,如下面的一個:

<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小號

我不知道如何使用XStream的目的...是否有可能實現我想要做的XStream或我需要JaxB?

+0

我對Spring Batch並不熟悉,但該XML文檔的JAXB映射將非常直截了當。以下文章將幫助您開始:http://blog.bdoughan.com/2010/09/jaxb-collection-properties.html –

回答

1

XStream將是'最簡單的'imho - 實質上允許您快速構建一組映射文檔然後使用XStream配置將文檔分析到其中的POJO。例如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"); 

並用它來實現d文檔

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

現在你可以使用root POJO,你會任何父對象並獲取相應的組和郵件項目。

0

XStream主要用於xml的編組和解組,您可以將xml解組爲java對象,然後運行這些對象並完成您的任務。

如果您想對數據「做出反應」,我寧願建議使用對不同標籤有反應的sax/stax閱讀器。

由於JaxB被提及,它幾乎與XStream相同。根據經驗,我總是發現XStream更易於使用。然而,如果你想更詳細地瞭解這個帖子的不同之處:http://www.stackoverflow.com/questions/4230499/java-to-xml-conversions這篇文章還討論了其他幾個可能與你有關的解決方案。

+1

JAXB(JSR-222)旨在從Java類開始。您不需要從XML模式生成它們:http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html –

+0

謝謝,我已經有意識地錯過了這一點。我編輯了我的答案,所以我不會誤導其他人。 – atomman