使用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

 

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