XML转Java实体对象


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();








免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM