尝试这个:
首先你有你的根类 Response
@XmlRootElement(name = "Response", namespace = "http://tempuri.org/")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {
@XmlElement(name="Result", namespace = "http://tempuri.org/")
private Result result;
}
其中包含结果:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Result", propOrder = { "Errors", "Count", "Return", "DashboardDTOs"})
public class Result {
@XmlElement(name="Errors", required = true, namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private String Errors;
@XmlElement(name="Count", required = true, namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private Integer Count;
@XmlElement(name="Return", required = true, namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private String Return;
@XmlElement(name = "DashboardDTOs", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private List<DashboardDTOs> DashboardDTOs;
}
现在,根据我的口味,它有点“混乱”。您的 xml 包含一个元素 DashboardDTOs,其中包含 DashboardDTO 列表,这些列表具有值、代码和名称。因此,您需要创建一个 DashboardDTOs 类,如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DashboardDTOs", propOrder = {
"Value",
"Code",
"Name",
"DashboardDTOs"
})
public class DashboardDTOs {
@XmlElement(name = "Value", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private double Value;
@XmlElement(name = "Code", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private String Code;
@XmlElement(name = "Name", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private String Name;
@XmlElement(name = "DashboardDTOs", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private List<DashboardDTOs> DashboardDTOs;
}
这些 POJO 将允许您使用主体内指定的 xml 进行编组/解组。
更新以回复评论:
使用更新后的 xml,类将如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DashboardDTOs")
public class DashboardDTOs {
@XmlElement(name = "DashboardDTO", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private List<DashboardDTO> dashboardDTO;
}
and:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {
"value",
"code",
"Nnme",
})
public class DashboardDTO {
@XmlElement(name = "Value", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private double value;
@XmlElement(name = "Code", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private String code;
@XmlElement(name = "Name", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
private String Nnme;
}
现在使用 xml 文件(为了方便):
<Response xmlns="http://tempuri.org/">
<Result xmlns:a="http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Errors />
<a:Count>329</a:Count>
<a:Return>SUCCESS</a:Return>
<a:DashboardDTOs>
<a:DashboardDTO>
<a:Value>28.58</a:Value>
<a:Code>O001</a:Code>
<a:Name>Test2</a:Name>
</a:DashboardDTO>
<a:DashboardDTO>
<a:Value>40.22</a:Value>
<a:Code>O002</a:Code>
<a:Name>Test2</a:Name>
</a:DashboardDTO>
<a:DashboardDTO>
<a:Value>54.11</a:Value>
<a:Code>O003</a:Code>
<a:Name>Test3</a:Name>
</a:DashboardDTO>
</a:DashboardDTOs>
</Result>
</Response>
并尝试编组/解组是否在简单的 main 中工作:
public static void main(String[] args) {
try {
File file = new File("response.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Response.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Response response = (Response) jaxbUnmarshaller.unmarshal(file);
System.out.println(response);
} catch (JAXBException e) {
e.printStackTrace();
}
}
对我来说效果很好。在主要部分尝试一下,如果它有效,但在您的应用程序中不起作用,请告诉我,我们可以看看那里还有什么问题。