[英]Convert complex XML to Java object
我有一個 xml,我想將特定標簽的子代形成的子 xml 保存到一個字符串中。 這是一個 xml 示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SampleDTO>
<id>1</id>
<someList>
<someObject>
<amount>32</amount>
<id>1</id>
<someDescription>I am a description</someDescription>
</someObject>
<someObject>
<amount>66</amount>
<id>2</id>
<someDescription>I am another description</someDescription>
</someObject>
<someObject>
<amount>78</amount>
<id>13</id>
<someDescription>Guess what? I am a description</someDescription>
</someObject>
</someList>
<otherList>
<otherObject>
<flag>true</flag>
<id>1</id>
<otherDescription>Oh nice, a description</otherDescription>
</otherObject>
</otherList>
</SampleDTO>
我想,例如傳遞“someList”,將 sub-xml 元素和值保存到一個字符串中,因為接下來我將它反序列化為一個 java 對象
使用 JAXB 解組器將 xml 文檔轉換為 java 對象。 首先將 JAXB 依賴項添加到項目的類路徑中。 欲了解更多信息
示例DTO.java
@XmlRootElement
public class SampleDTO {
private String id;
private List<SomeList> someList;
private List<OtherList> otherList;
@XmlElement
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement
public List<SomeList> getSomeList() {
return someList;
}
public void setSomeList(List<SomeList> someList) {
this.someList = someList;
}
@XmlElement
public List<OtherList> getOtherList() {
return otherList;
}
public void setOtherList(List<OtherList> otherList) {
this.otherList = otherList;
}
}
SomeList.java
@XmlRootElement
public class SomeList {
private List<SomeObject> someObject;
@XmlElement
public List<SomeObject> getSomeObject() {
return someObject;
}
public void setSomeObject(List<SomeObject> someObject) {
this.someObject = someObject;
}
}
其他列表.java
@XmlRootElement
public class OtherList {
private List<OtherObject> otherObject;
@XmlElement
public List<OtherObject> getOtherObject() {
return otherObject;
}
public void setOtherObject(List<OtherObject> otherObject) {
this.otherObject = otherObject;
}
}
對象.java
@XmlRootElement
public class SomeObject {
private String amount;
private String id;
private String someDescription;
@XmlElement
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
@XmlElement
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement
public String getSomeDescription() {
return someDescription;
}
public void setSomeDescription(String someDescription) {
this.someDescription = someDescription;
}
}
其他對象.java
@XmlRootElement
public class OtherObject {
private String flag;
private String id;
private String otherDescription;
@XmlElement
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
@XmlElement
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement
public String getOtherDescription() {
return otherDescription;
}
public void setOtherDescription(String otherDescription) {
this.otherDescription = otherDescription;
}
}
使用 JAXB 解組
public class Main {
public static void main(String[] args) {
try {
File file = new File("file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(SampleDTO.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
SampleDTO sampleDTO= (SampleDTO) jaxbUnmarshaller.unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
你的 java 類/對象應該至少有這 3 個實例變量:
private int amount
private int id
private String description
然后使用一些 xml 解析庫(例如jdom2 ),並且對於您迭代的每個<someObject>
標記,初始化您的類的一個新對象並將從 xml (amount / id / description) 解析的值分配給它,並添加每個列表或數組等中新創建的對象。
有許多可用的開源 XML 處理包。 我喜歡傑克遜。 這是有關 Jackson XML的Baeldung 文章的鏈接
總結是這樣的:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.