Dom4j解析XML資料

冰河藍天發表於2017-03-30

本例項基於現實工作而來,主要是在實際的開發過程中,一直使用的XML解析工具類是XStream。但是在實際使用過程中卻發現,它是針對XML資料完全解析,這就意味著,若是在要解析的XML中出現亂碼等未知事件時,你將束手無策,只能任由一顆老鼠屎壞了一鍋湯。但不可否認XStream的好處是,整體解析,不需太多在意其內部結構,但基本的層級關係還是需要你來構造的。

為了解決這一問題,我換成Dom4j,針對其中的每一個節點進行解析,並處理可能發生的異常。下面直接上程式碼(CollectResult為我構造裝配結果的實體):

/**
     * Dom4j 解析收藏使用者列表
     *
     * @param xml
     * @return CollectResult
     * @author chengjinqi
     */
    public static CollectResult parseStringXml(String xml) {
        CollectResult collectResult = new CollectResult();
        Document doc;
        try {
            doc = DocumentHelper.parseText(xml); // 將字串轉為XML
            Element root = doc.getRootElement();// 獲取根節點
            try {
                collectResult.setCount(Integer.parseInt(root.elementTextTrim("count")));
                collectResult.setResultCode(Integer.parseInt(root.elementTextTrim("result_code")));
            } catch (Exception e) {
                logger.error("parse int error." + e);
            }
            collectResult.setMessage(root.elementTextTrim("message"));

            //遍歷list節點
            List<CollectItem> list = new ArrayList<CollectItem>();
            Iterator it = root.elementIterator("list");
            while (it.hasNext()) {
                //遍歷item節點
                try {
                    Element element = (Element) it.next();
                    Iterator iterator = element.elementIterator("item");
                    while (iterator.hasNext()) {
                        Element itemEle = (Element) iterator.next();
                        CollectItem collectItem = new CollectItem();
                        collectItem.setId(itemEle.elementTextTrim("userid"));
                        try {
                            collectItem.setName(itemEle.elementTextTrim("username"));
                        } catch (Exception e) {
                            logger.error("user name parse xml error." + e);
                        }
                        list.add(collectItem);
                    }
                } catch (Exception e) {
                    logger.error("foreach parse xml error. " + e);
                }
            }
            CollectList collectList = new CollectList();
            collectList.setCollectItems(list);
            collectResult.setCollectList(collectList);
        } catch (DocumentException e) {
            logger.error("DocumentException parse xml error. " + e);
        }
        return collectResult;
    }

相關文章