我正在尝试使用 JAXB 将给定的 XML 文件解析为 Common Class。但是我在 class 中没有得到任何东西
I am trying to parse the given XML file into a Common Class using JAXB. But I do not get anything in the class
下面给出的是示例 XML 文件。我想使用 JAXB 将 XML 中的所有信息提取到 Java 对象中。请注意标签重复。
<ICExt>
<AA>
<PA1>20067</PA1>
<PA2>
<FFGAG>
<KICUC>
<R_CAT_NAME>testing1234</R_CAT_NAME>
<params>
<req_id>7746318</req_id>
<FNAME>Testing line</FNAME>
<ldata_group_id/>
<edate>2010-01-01</edate>
<sdate/>
<rep_cat_id>265131</rep_cat_id>
<ac_param_group_id/>
</params>
<Employees>
<empl_rec>
<emp_id>1000</emp_id>
<Salary>20000</Salary>
</empl_rec>
</Employees>
<Employees>
<empl_rec>
<emp_id>5600</emp_id>
<Salary>34000</Salary>
</empl_rec>
</Employees>
</KICUC>
</FFGAG>
</PA2>
</AA>
</ICExt>
有什么想法吗?
我已经使用 JAXB 将 XML 解析为 Java 对象。
ICExt 是一个常见的class。
ICExtUnmarshaler 是一个解析器
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@XmlRootElement(name = "ICExt")
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
@Setter
@Getter
@ToString
public class ICExt {
@XmlElement(name = "AA")
private AA aa;
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class AA {
@XmlElement(name = "PA1")
private String pa1;
@XmlElement(name = "PA2")
private PA2 pa2;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class PA2 {
@XmlElement(name = "FFGAG")
private FFGAG ffgag;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class FFGAG {
@XmlElement(name = "KICUC")
private KICUC kicuc;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class KICUC {
@XmlElement(name = "R_CAT_NAME")
private String rCatName;
@XmlElement(name = "Employees")
private List<Employee> employees = new LinkedList<>();
@XmlElement(name = "params")
private Params params;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class Params {
@XmlElement(name = "req_id")
private String reqId;
@XmlElement(name = "sdate")
private Date startDate;
@XmlElement(name = "rep_cat_id")
private String repCatId;
@XmlElement(name = "ldata_group_id")
private String lDataGroupId;
@XmlElement(name = "ac_param_group_id")
private String acParamGroupId;
@XmlElement(name = "edate")
private Date endDate;
@XmlElement(name = "FNAME")
private String fName;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class Employee {
@XmlElement(name = "empl_rec")
private EmplRec emplRec;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class EmplRec {
@XmlElement(name = "Salary")
private String salary;
@XmlElement(name = "emp_id")
private String empId;
}
}
import javax.xml.bind.JAXBContext;
import java.io.StringReader;
public class ICExtUnmarshaler {
public ICExt unmarshal(String xmlContent) throws Exception {
JAXBContext context = JAXBContext.newInstance(ICExt.class);
return (ICExt) context.createUnmarshaller().unmarshal((new StringReader(xmlContent)));
}
}
下面给出的是示例 XML 文件。我想使用 JAXB 将 XML 中的所有信息提取到 Java 对象中。请注意标签重复。
<ICExt>
<AA>
<PA1>20067</PA1>
<PA2>
<FFGAG>
<KICUC>
<R_CAT_NAME>testing1234</R_CAT_NAME>
<params>
<req_id>7746318</req_id>
<FNAME>Testing line</FNAME>
<ldata_group_id/>
<edate>2010-01-01</edate>
<sdate/>
<rep_cat_id>265131</rep_cat_id>
<ac_param_group_id/>
</params>
<Employees>
<empl_rec>
<emp_id>1000</emp_id>
<Salary>20000</Salary>
</empl_rec>
</Employees>
<Employees>
<empl_rec>
<emp_id>5600</emp_id>
<Salary>34000</Salary>
</empl_rec>
</Employees>
</KICUC>
</FFGAG>
</PA2>
</AA>
</ICExt>
有什么想法吗?
我已经使用 JAXB 将 XML 解析为 Java 对象。
ICExt 是一个常见的class。 ICExtUnmarshaler 是一个解析器
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@XmlRootElement(name = "ICExt")
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
@Setter
@Getter
@ToString
public class ICExt {
@XmlElement(name = "AA")
private AA aa;
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class AA {
@XmlElement(name = "PA1")
private String pa1;
@XmlElement(name = "PA2")
private PA2 pa2;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class PA2 {
@XmlElement(name = "FFGAG")
private FFGAG ffgag;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class FFGAG {
@XmlElement(name = "KICUC")
private KICUC kicuc;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class KICUC {
@XmlElement(name = "R_CAT_NAME")
private String rCatName;
@XmlElement(name = "Employees")
private List<Employee> employees = new LinkedList<>();
@XmlElement(name = "params")
private Params params;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class Params {
@XmlElement(name = "req_id")
private String reqId;
@XmlElement(name = "sdate")
private Date startDate;
@XmlElement(name = "rep_cat_id")
private String repCatId;
@XmlElement(name = "ldata_group_id")
private String lDataGroupId;
@XmlElement(name = "ac_param_group_id")
private String acParamGroupId;
@XmlElement(name = "edate")
private Date endDate;
@XmlElement(name = "FNAME")
private String fName;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class Employee {
@XmlElement(name = "empl_rec")
private EmplRec emplRec;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@EqualsAndHashCode
public static class EmplRec {
@XmlElement(name = "Salary")
private String salary;
@XmlElement(name = "emp_id")
private String empId;
}
}
import javax.xml.bind.JAXBContext;
import java.io.StringReader;
public class ICExtUnmarshaler {
public ICExt unmarshal(String xmlContent) throws Exception {
JAXBContext context = JAXBContext.newInstance(ICExt.class);
return (ICExt) context.createUnmarshaller().unmarshal((new StringReader(xmlContent)));
}
}