SAX 解析XML 将xml转换成javaBean

雨点打透心脏的1/2处 2022-09-24 05:18 314阅读 0赞

SAX没有提供,直接将xml转成自定义javaBean的方法。

自己写了一个工具类通过反射机制转换。可以支持多数组。

  1. /**
  2. * Created by tiantao on 16-7-20.
  3. */
  4. public class SaxUtil {
  5. private static final Logger logger = LoggerFactory.getLogger(SaxUtil.class);
  6. public static RequestBean converyRequestBean(String xml) {
  7. RequestBean requestBean = new RequestBean();
  8. try {
  9. SAXBuilder sb = new SAXBuilder();
  10. StringReader read = new StringReader(xml);
  11. InputSource source = new InputSource(read);
  12. Document doc = sb.build(source);
  13. Element root = doc.getRootElement();
  14. recursionConvery(root, RequestBean.class, requestBean);
  15. } catch (Exception e) {
  16. logger.error(e.toString(),e);
  17. return null;
  18. }
  19. return requestBean;
  20. }
  21. private static void recursionConvery(Element e, Class<?> clazz, Object o) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
  22. List<Element> el = e.getChildren();
  23. if (el.size() > 0) {
  24. for (Element element : el) {
  25. String childClassName = element.getName();
  26. String getMethodName = "get" + childClassName.substring(0, 1).toUpperCase() + childClassName.substring(1);
  27. String setMethodName = "set" + childClassName.substring(0, 1).toUpperCase() + childClassName.substring(1);
  28. //当属性名为Class或class时,特殊处理get方法写成getclass
  29. if ("getClass".equals(getMethodName)) {
  30. getMethodName = "getclass";
  31. }
  32. Class<?> clazz1 = null;
  33. Method[] ms = clazz.getMethods();
  34. for (Method m : ms) {
  35. if (getMethodName.equals(m.getName())) {
  36. clazz1 = m.getReturnType();
  37. if (clazz1.isArray()) {
  38. int arraySize = 0;
  39. for (Element element1 : el) {
  40. if (element1.getName().equals(clazz1.getComponentType().getSimpleName())) {
  41. arraySize++;
  42. }
  43. }
  44. Object arrayObjects = Array.newInstance(clazz1.getComponentType(), arraySize);
  45. int n = 0;
  46. for (Element element1 : el) {
  47. if (element1.getName().equals(clazz1.getComponentType().getSimpleName())) {
  48. Object oneO = clazz1.getComponentType().newInstance();
  49. recursionConvery(element1, clazz1.getComponentType(), oneO);
  50. Array.set(arrayObjects, n, oneO);
  51. n++;
  52. }
  53. }
  54. Method setMethod = clazz.getMethod(setMethodName, clazz1);
  55. setMethod.invoke(o, arrayObjects);
  56. } else {
  57. if (element.getChildren() != null && element.getChildren().size() > 0) {
  58. Object o1 = clazz1.newInstance();
  59. recursionConvery(element, clazz1, o1);
  60. Method setMethod = clazz.getMethod(setMethodName, clazz1);
  61. setMethod.invoke(o, o1);
  62. } else {
  63. Method setMethod = clazz.getMethod(setMethodName, clazz1);
  64. setValue(element, setMethod, o);
  65. }
  66. }
  67. }
  68. }
  69. }
  70. }
  71. }
  72. private static void setValue(Element element, Method method, Object o) throws InvocationTargetException, IllegalAccessException {
  73. Class<?>[] c = method.getParameterTypes();
  74. Object v = null;
  75. if (element.getContentSize() > 0){
  76. String text = element.getTextTrim();
  77. String cn = c[0].getSimpleName();
  78. if ("int".equals(cn) || "Integer".equals(cn)) {
  79. v = Integer.parseInt(text);
  80. } else if ("long".equals(cn) || "Long".equals(cn)) {
  81. v = Long.parseLong(text);
  82. } else if ("double".equals(cn) || "Double".equals(cn)) {
  83. v = Double.parseDouble(text);
  84. } else if ("float".equals(cn) || "Float".equals(cn)) {
  85. v = Float.parseFloat(text);
  86. } else {
  87. v = text;
  88. }
  89. }
  90. method.invoke(o, v);
  91. }
  92. }

代码需要一些其他类,不能直接运行。迭代方法和设置属性值都是可以用的。

发表评论

表情:
评论列表 (有 0 条评论,314人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SAX解析XML

    *下面是SAX解析XML的示例,包括三个文件employee.xml、Employee.java、SaxEmployee.java** **1.被解析的employee...

    相关 SAX解析XML

    SAX(Simple API for XML)也是一种解析 XML 文件的方法,它虽然不是官方标准,但它是 XML 的事实标准,大部分 XML 解析器都支持它。 SAX 与

    相关 Java SAX 解析 XML

    与 DOM 建立树形结构的方式不同,SAX 采用事件模型来解析 XML 文档,是解析 XML 文档的一种更快速、更轻量的方法。 利用 SAX 可以对 XML 文档进行有选择的

    相关 SAX解析XML

    SAX(Simple API for XML)也是一种解析 XML 文件的方法,它虽然不是官方标准,但它是 XML 的事实标准,大部分 XML 解析器都支持它。 SAX ...