2015-11-17 50 views
0

說我有一個包含數千個包含各種細節節點的一個非常大的XML文件,是這樣的:如何在Java中將XML節點反序列化爲pojo?

<Document> 
    <Header> 
    </Header> 
    <Whatever> 
     <Person> 
      <Name>John Doe</Name> 
      <Age>30</Age> 
     </Person> 
     <Person> 
      <Name>Jane Doe</Name> 
      <Age>30</Age> 
     </Person> 
     ... 
    </Whatever> 
</Document> 

我要流的XML文件,每次它擊中一個人的節點,它應該給我一個人pojo。有了StAX,我可以通過手動創建pojo來做到這一點,但我敢打賭,那裏有圖書館可以爲我做這件事。

+0

可以使用https://jaxb.java.net/,但你需要提供一個XML架構 –

回答

0

您可以編寫一個掃描XML文件的Java程序,並且每遇到字符串<Person>開始保存後續字符串,直到它達到</Person>

一旦像<Person>....</Person>這樣的字符串被提取出來 - 使用庫如Jackson將其轉換爲Java對象。

0

定義一個類,如:

@XmlRootElement 
public class Person { 

    @XmlElement(name = "Name") 
    String name; 

    @XmlElement(name = "Age") 
    int age; 
} 

@XmlRootElement 
public class Header {  
} 

@XmlRootElement 
public class Document { 

    @XmlElement(name = "Header") 
    Header header; 

    @XmlElementWrapper(name = "Whatever") 
    @XmlElement(name = "person") 
    List<Person> people; 
} 

後使用JAXB解編XML反對。

JAXBContext jaxbContext = JAXBContext.newInstance(Document.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Document document = (Document) jaxbUnmarshaller.unmarshal(file); 

List<Person> people = document.getPeople(); 
+0

這種解決方案的問題是,XML文件可以是10 GB大,我不想將所有內容都留在記憶中。 –

+0

如果您的文件很大或內存不足,最好的方法是使用StAX解析器 – codeaholicguy