如何将 XML 节点反序列化为 Java 中的 pojo?
How to deserialize XML node to pojo in Java?
假设我有一个非常大的 XML 文件,其中包含数千个包含各种详细信息的节点,例如:
<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 文件,每次它命中一个 Person 节点时,它应该给我一个 Person pojo。使用 StAX,我可以通过手动创建 pojo 来做到这一点,但我敢打赌那里有图书馆可以为我做到这一点。
您可以编写一个 Java 程序来扫描 XML 文件,每次遇到字符串 <Person>
就开始保存后续字符串,直到到达 </Person>
.
提取出 <Person>....</Person>
之类的字符串后 - 使用 Jackson 之类的库将其转换为 Java 对象。
定义一个 class 如:
@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();
假设我有一个非常大的 XML 文件,其中包含数千个包含各种详细信息的节点,例如:
<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 文件,每次它命中一个 Person 节点时,它应该给我一个 Person pojo。使用 StAX,我可以通过手动创建 pojo 来做到这一点,但我敢打赌那里有图书馆可以为我做到这一点。
您可以编写一个 Java 程序来扫描 XML 文件,每次遇到字符串 <Person>
就开始保存后续字符串,直到到达 </Person>
.
提取出 <Person>....</Person>
之类的字符串后 - 使用 Jackson 之类的库将其转换为 Java 对象。
定义一个 class 如:
@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();