使用dom4j解析xml格式数据并封装为javabean对象

一、pom文件引入dom4jjar包:

<!-- org.dom4j -->
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
</dependency>

二、SAXReader类说明

实现对xml文件的解析,主要使用到的是dom4j中的SAXReader类,该类的使用方法如下:

//构造SAXReader
SAXReader sr = new SAXReader();
//加载文件
Document doc = sr.read(File file)

//Document对象代表XML文件在内存中的印象

Element getRootElement()//取得根元素
Element.getName()
Element.elements() //取得该元素下的所有直接子元素
Element.elementText("str") //从一个元素导航到另一个元素,并取出该元素的文本
Element.element("str"); //导航到另一个元素
Element.attributeValue("str"); //取得该元素对应的属性

二、解析xml格式数据到list<JavaObj>

List<ExpressionItemVo> list = new ArrayList<ExpressionItemVo>();
try {
    //1.创建一个SAXBuilder的对象
    SAXReader reader = new SAXReader();
    Document doc = reader.read(new InputSource(new ByteArrayInputStream(dto.getBdsxml().getBytes("UTF-8"))));//dom4j读取
    // 2.通过document对象获取xml文件的根节点
    Element root = doc.getRootElement();//获得根节点
    List<Element> elementList = root.elements();
    int elementXh = 1;
    for (Element foo : elementList) {
        ExpressionItemVo obj = new ExpressionItemVo();
        obj.setItemXh("item_" + elementXh);
        Field[] properties = obj.getClass().getDeclaredFields();//获得实例的属性
        //实例的set方法
        Method setmeth;
        //遍历实体类的属性
        for (int j = 0; j < properties.length; j++) {
            //实例的set方法
            if (properties[j].getName().equals("itemXh")) {//序号手动赋值
                continue;
            } else {
                setmeth = obj.getClass().getMethod(
                        "set"
                                + properties[j].getName().substring(0, 1).toUpperCase()
                                + properties[j].getName().substring(1), properties[j].getType());
                Object setStr = foo.elementText(properties[j].getName());

                if (foo.elementText(properties[j].getName()) != null&&!"".equals(foo.elementText(properties[j].getName()))) {
                    if (properties[j].getType() == java.util.Date.class) {
                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Date sj = df.parse(foo.elementText(properties[j].getName()));
                        setStr = sj;
                    } else if (properties[j].getType() == java.lang.Integer.class) {
                        setStr = Integer.parseInt(foo.elementText(properties[j].getName()));
                    } else if (properties[j].getType() == java.lang.Character.class) {
                        setStr = foo.elementText(properties[j].getName()).charAt(0);
                    }else if (properties[j].getType() == java.lang.Double.class) {
                        setStr = Double.parseDouble(foo.elementText(properties[j].getName()));
                    }
                } else {
                    setStr = null;
                }
                //将对应节点的值存入
                setmeth.invoke(obj, setStr);
            }
        }
        list.add(obj);
        elementXh ++;
    }
} catch (Exception e) {
    e.printStackTrace();
}

注意:

1)javaBean中的首字母大小写要和xml格式中的属性值首字母大小写一致;

参照网址:

1)dom4j解析xml文件方式:

https://blog.csdn.net/iopfan/article/details/68484779

2)利用反射将xml转换为List<Object>

https://www.cnblogs.com/514929hgy/p/9143182.html

3)使用dom4j解析xml文件,并封装为javabean对象

https://blog.csdn.net/zhaofuqiangmycomm/article/details/78414830

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章