1.當拿到的xml是String 類型的
String xml = "<User>" +
"<name>張三</name>" +
"<sex>男</sex>" +
"<age>28</age>" +
"</User>";
通過下面方法就可以轉成java對象
public static <T> T xmlToBean(String xmlPath,Class<T> load) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(load);
Unmarshaller unmarshaller = context.createUnmarshaller();
return (T) unmarshaller.unmarshal(new StringReader(xmlPath));
}
Java對象需要@XmlAccessorType(XmlAccessType.FIELD);@XmlType;@XmlRootElement(name = "User")注釋用來映射
@Data
@JsonSerialize
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "",propOrder = {
"name",
"age",
"sex"
})
@XmlRootElement(name = "User")
public class User {
private String name;
private Integer age;
private String sex;
}
最后直接調用方法就可以
User user = (User) JaxbUtil.xmlToBean(xml, User.class);
2.當拿到的xml與實體類的屬性名不一致時,將@XmlType注釋換成@XmlElement(name = "Name", required = true)單獨為每個屬性注釋,
@Data
@JsonSerialize
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "User")
public class User {
@XmlElement(name = "Name", required = true)
private String name;
@XmlElement(name = "Age", required = true)
private Integer age;
@XmlElement(name = "Sex", required = true)
private String sex;
}
3.當拿到的xml不是String類型是,是NoteList對象;需要先轉為String在轉為對象
MessageElement[] elements = value.get_any();
調用轉換方法
List<HicOutBoundDTO> outboundlist = (List<HicOutBoundDTO>) JaxbUtil.xmlToString(HicOutBoundDTO.class,elements,"Outbound");
該方法是直接轉為對象的List集合了
public static <T> T xmlToString(Class<T> load, MessageElement[] elements, String table) {
try{
NodeList outbound = elements[1].getElementsByTagName(table);
List<Object> listDto = new ArrayList<>() ;
for(int i=0;i<outbound.getLength();i++){
Element node = (Element)outbound.item(i);
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node),
new StreamResult(buffer));
String str = buffer.toString();
//再轉為java對象
JAXBContext context = JAXBContext.newInstance(load);
Unmarshaller unmarshaller = context.createUnmarshaller();
listDto.add(unmarshaller.unmarshal(new StringReader(str)));
}
return (T)listDto;
}
catch(Exception e)
{
return null;
}
}
4需要一個一個的值拿出來的時候
Element node = (Element)outbound.item(0);
node.getElementsByTagName("DeliveyType").item(0).getFirstChild().getNodeValue();