如何将xml解析为java对象_浅析如何将XML文档解析成java对象(待梳理)

public classXmlParser {public static void main(String[] args) throwsException {//待填充user对象

User user = newUser();//获得User的class对象,后续要使用反射

Class clazz =user.getClass();

File file= new File("D:\\jsd1707\\xtt\\workspace\\rams\\src\\main\\java\\admin.xml");

SAXReader reader= newSAXReader();//读取xml文件到Document中

Document doc =reader.read(file);//获取xml文件的根节点

Element rootElement =doc.getRootElement();

System.out.println("根节点:" +rootElement.getName());//获得根节点的所有属性

List attrList =rootElement.attributes();for(Attribute attribute : attrList) {//根节点某个属性名

String attrName =attribute.getName();

System.out.println("当前节点属性名:" +attrName);//根节点某个属性值

String attrValue =attribute.getValue();//通过属性名定位user对象中对应属性的setter方法

Field filed =clazz.getDeclaredField(attrName);

Class cla= filed.getType();//属性类型

System.out.println("当前属性类型名称:" +cla.getName());

Object val=typeTransfer(cla.getName(), attrValue);

String methodName= "set" + attrName.substring(0, 1).toUpperCase() + attrName.substring(1);

System.out.println("当前节点属性对应方法名:" +methodName);

Method method=clazz.getDeclaredMethod(methodName, cla);

method.invoke(user, val);

}//获取子节点

List elements =rootElement.elements();for(Element element : elements) {//根节点某个节点名

String elemName =element.getName();

System.out.println("当前节点属性名:" +elemName);//根节点某个节点值

String elemValue =element.getText();//通过节点名定位user对象中对应属性的setter方法

Field filed =clazz.getDeclaredField(elemName);

Class cla= filed.getType();//属性类型

System.out.println("当前属性类型名称:" +cla.getName());

Object val=typeTransfer(cla.getName(), elemValue);

String methodName= "set" + elemName.substring(0, 1).toUpperCase() + elemName.substring(1);

System.out.println("当前节点属性对应方法名:" +methodName);

Method method=clazz.getDeclaredMethod(methodName, cla);

method.invoke(user, val);

}

System.out.println(user);

}private static Object typeTransfer(String typeName, String vlaue) throwsParseException {switch(typeName) {case "java.lang.Integer":returnInteger.valueOf(vlaue);case "java.lang.String":returnvlaue;case "java.util.Date":return new SimpleDateFormat("yyyy-MM-dd").parse(vlaue);

}return null;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值