zoukankan      html  css  js  c++  java
  • 自动将String类型的XML解析成实体类

    package com.mooc.freemarker2dto;
    
    public class BaseDto {
    
        
    }
    package com.mooc.freemarker2dto;
    
    public class Book extends BaseDto{
    
        
        private String name;
        private String author;
        private String year;
        private float price;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        public String getYear() {
            return year;
        }
        public void setYear(String year) {
            this.year = year;
        }
        
        public float getPrice() {
            return price;
        }
        public void setPrice(float price) {
            this.price = price;
        }
        @Override
        public String toString() {
            return "Book [name=" + name + ", author=" + author + ", year=" + year + ", price=" + price + "]";
        }
        
        
    }

    package com.mooc.freemarker2dto;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class ResultDto {
    
        private String Count;
        private List<BaseDto> detailData = new ArrayList();
        public String getCount() {
            return Count;
        }
        public void setCount(String count) {
            Count = count;
        }
        public List<BaseDto> getDetailData() {
            return detailData;
        }
        public void setDetailData(List<BaseDto> detailData) {
            this.detailData = detailData;
        }
        
    }
    <?xml version="1.0" encoding="utf-8"?>
    
    <bookstore>
      <books count="2">
        <book>
          <name>冰与火之歌</name>
          <author>乔治马丁</author>
          <year>2014</year>
          <price>89</price>
        </book>
        <book>
          <name>安徒生童话</name>
          <author>安徒生</author>
          <year>2014</year>
          <price>69</price>
        </book>
      </books>
    </bookstore>

    package com.mooc.freemarker2dto;
    
    public class User extends BaseDto{
    
        private String name;
        private char sex;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public char getSex() {
            return sex;
        }
        public void setSex(char sex) {
            this.sex = sex;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "User [name=" + name + ", sex=" + sex + ", age=" + age + "]";
        }
        
    }
    package com.mooc.freemarker2dto;
    
    import java.beans.BeanInfo;
    import java.beans.IntrospectionException;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    public class DtoUtils {
    
        public static ResultDto parserDto(String repsponseXml,BaseDto baseDto) throws Exception{
              Document doc = DocumentHelper.parseText(repsponseXml);
              Element rootElement = doc.getRootElement();
              ResultDto resultDto = new ResultDto();
              for (Iterator<Element> i = rootElement.elementIterator(); i.hasNext();) {
                  Element monits = (Element) i.next();
                  element2Dto(monits, resultDto,baseDto);
              }
              return resultDto;
        }
        
        public static void element2Dto(Element element,ResultDto resultDto,BaseDto baseDto) throws Exception{
             List<Attribute> bean = new ArrayList<Attribute>();
             bean = element.attributes();
             if(bean.size()>0){
                 resultDto.setCount(bean.get(0).getStringValue());
             }
             if(element.hasContent()){
                 List<Element> list = element.elements();
                 for (int i=0;i<list.size();i++){
                    BaseDto obj = baseDto.getClass().newInstance();
                    Element base = list.get(i);
                    if(base.elements().size()>0){
                        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
                        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                         for(PropertyDescriptor property : propertyDescriptors){
                             //获取属性名
                             String key = property.getName();
                             if(base.element(key)!=null){
                                 Object value = base.element(key).getStringValue();
                                 Method setter = property.getWriteMethod();
                                 Class<?>[] params = setter.getParameterTypes();
                                 if (params != null && params.length > 0 && value != null){
                                     Class<?> param = params[0];
                                     System.out.println("param:"+param.getName()+"  value:"+value.getClass().getName());
                                     if(param.getName().equals(value.getClass().getName())){
                                            setter.invoke(obj, value);
                                            continue;
                                      }
                                    if (param.getName().equals(Integer.class.getName()) // Integer
                                            || param.getName().equals(Integer.TYPE.getName())) {
                                        value= Integer.valueOf(value.toString());
                                    } else if (param.getName().equals(Double.class.getName()) // Double
                                            || param.getName().equals(Double.TYPE.getName())) {
                                        value= Double.valueOf(value.toString());
                                    } else if (param.getName().equals(Float.class.getName()) // Float
                                            || param.getName().equals(Float.TYPE.getName())) {
                                        value= Float.valueOf(value.toString());
                                    } else if (param.getName().equals(Long.class.getName()) // Long
                                            || param.getName().equals(Long.TYPE.getName())) {
                                        value= Long.valueOf(value.toString());
                                    }else if (param.getName().equals(Character.class.getName())||param.getName().equals(Character.TYPE.getName())) {
                                        char c[] = value.toString().toCharArray();
                                        if(c.length>0){
                                            value = c[0];
                                        }
                                        
                                    }
                         
                                    setter.invoke(obj, value);
                                 }
                             }
                         }
                    }
                    resultDto.getDetailData().add(obj);
                     
                 }
             }
             
             
             
        }
    }
    package com.mooc.freemarker2dto;
    
    import java.util.List;
    
    public class Test {
    
        public static void main(String[] args) throws Exception {
            String repsponseXml = "<?xml version='1.0' encoding='UTF-8'?><bookstore><books count='2'><book><name>冰与火之歌</name><author>乔治马丁</author><year>2014</year><price>89</price></book><book><name>安徒生童话</name><author>安徒生</author><year>2014</year><price>69</price></book></books></bookstore>";
            String resp = "<?xml version='1.0' encoding='UTF-8'?><bookstore><users count='2'><user><name>小红</name><sex>1</sex><age>22</age></user><user><name>小明</name><sex>1</sex><age>19</age></user></users></bookstore>";
            Book book = new Book();
            ResultDto resultDto = DtoUtils.parserDto(repsponseXml, book);
            System.err.println(resultDto.getCount());
            List<BaseDto> baseDtos = resultDto.getDetailData();
            for (BaseDto baseDto : baseDtos) {
                Book book2 = (Book) baseDto;
                System.out.println(book2);
            }
            
            User user = new User();
            ResultDto resultDtos = DtoUtils.parserDto(resp, user);
            System.out.println("数量:"+resultDtos.getCount());
            List<BaseDto> baseDtoss = resultDtos.getDetailData();
            for (BaseDto baseDto : baseDtoss) {
                User user2 = (User) baseDto;
                System.out.println(user2);
            }
        }
    
    }
  • 相关阅读:
    sysbench压测Oracle
    linux使用FIO测试磁盘的iops
    oracle 列授权相关测试
    11G、12C安装结束需要做的一些操作
    Oracle 12C R2 on Linux 7.X 单实例静默安装文档
    auto_create_partition
    关于使用索引的一些经验
    转:【Python3网络爬虫开发实战】 requests基本用法
    转:http协议学习系列(响应头---Response Headers)
    关于建立老猿Python研学群的公告
  • 原文地址:https://www.cnblogs.com/james-roger/p/5442325.html
Copyright © 2011-2022 走看看