1. 程式人生 > >dom4j解析xml的demo

dom4j解析xml的demo

xml文件結構如下:根節點下是子節點的列表,子節點又有自己的子節點。

<?xml version="1.0" encoding="utf-8"?>

<zzsfprzdatalist>
  <zzsfprzdata>
    <fpdm>2100162160</fpdm>
    <fphm>00036027</fphm>
    <kprq>2017-12-28 00:00:00</kprq>
    <gf_nsrsbh>91441900555584396G</gf_nsrsbh>
    <xf_nsrsbh
>
91210703584196173G</xf_nsrsbh> <je>19811.32</je> <se>1188.68</se> <rzrq>2018-03-05</rzrq> <rzfs>6</rzfs> <rzjg>0</rzjg> </zzsfprzdata> <zzsfprzdata> <fpdm>2100162160</fpdm> <fphm>00036028</fphm
>
<kprq>2017-12-28 00:00:00</kprq> <gf_nsrsbh>91441900555584396G</gf_nsrsbh> <xf_nsrsbh>91210703584196173G</xf_nsrsbh> <je>41471.7</je> <se>2488.3</se> <rzrq>2018-03-05</rzrq> <rzfs>6</rzfs> <rzjg>
0</rzjg> </zzsfprzdata> <zzsfprzdata> <fpdm>4403172130</fpdm> <fphm>44154688</fphm> <kprq>2017-12-12 00:00:00</kprq> <gf_nsrsbh>91441900555584396G</gf_nsrsbh> <xf_nsrsbh>914403001924657767</xf_nsrsbh> <je>509.43</je> <se>30.57</se> <rzrq>2018-03-05</rzrq> <rzfs>6</rzfs> <rzjg>0</rzjg> </zzsfprzdata> <zzsfprzdata> <fpdm>4403172130</fpdm> <fphm>42287655</fphm> <kprq>2017-12-13 00:00:00</kprq> <gf_nsrsbh>91441900555584396G</gf_nsrsbh> <xf_nsrsbh>91440300683754724H</xf_nsrsbh> <je>64617.12</je> <se>7107.88</se> <rzrq>2018-03-05</rzrq> <rzfs>6</rzfs> <rzjg>0</rzjg> </zzsfprzdata> </zzsfprzdatalist>

使用dom4j解析的demo:

package cn.com.susq;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author susq
 * @since 2018-04-10-18:29
 */
public class XmlParse {

    public static void main(String[] args) {
        String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><zzsfprzdatalist><zzsfprzdata><fpdm>2100162160</fpdm><fphm>00036027</fphm><kprq>2017-12-28 00:00:00</kprq><gf_nsrsbh>91441900555584396G</gf_nsrsbh><xf_nsrsbh>91210703584196173G</xf_nsrsbh><je>19811.32</je><se>1188.68</se><rzrq>2018-03-05</rzrq><rzfs>6</rzfs><rzjg>0</rzjg></zzsfprzdata><zzsfprzdata><fpdm>2100162160</fpdm><fphm>00036028</fphm><kprq>2017-12-28 00:00:00</kprq><gf_nsrsbh>91441900555584396G</gf_nsrsbh><xf_nsrsbh>91210703584196173G</xf_nsrsbh><je>41471.7</je><se>2488.3</se><rzrq>2018-03-05</rzrq><rzfs>6</rzfs><rzjg>0</rzjg></zzsfprzdata><zzsfprzdata><fpdm>4403172130</fpdm><fphm>44154688</fphm><kprq>2017-12-12 00:00:00</kprq><gf_nsrsbh>91441900555584396G</gf_nsrsbh><xf_nsrsbh>914403001924657767</xf_nsrsbh><je>509.43</je><se>30.57</se><rzrq>2018-03-05</rzrq><rzfs>6</rzfs><rzjg>0</rzjg></zzsfprzdata></zzsfprzdatalist>";
        Document doc = null;
//        SAXReader可以直接讀取xml檔案
//        SAXReader saxReader = new SAXReader();
//        try {
//            doc = saxReader.read(new File("D:/test.xml"));
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        }
        List list = new ArrayList();
        //將xml格式的字串轉換成Document物件
        try {
            doc = DocumentHelper.parseText(xmlStr);
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        //獲取根節點
        Element root = doc.getRootElement();
        //獲取根節點下的所有元素
        List children = root.elements();
        //迴圈所有子元素
        if (children != null && !children.isEmpty()) {
            for (Object child : children) {
                Element childELement = (Element) child;
                // 判斷子元素下面還有沒有子元素
                List grandsons = childELement.elements();
                Map<String, Object> grandsonMap = new HashMap<>();
                if (grandsons != null && !grandsons.isEmpty()) {
                    for (Object grandson : grandsons) {
                        Element grandsonElement = (Element) grandson;
                        grandsonMap.put(grandsonElement.getName(), grandsonElement.getTextTrim());
                    }
                }
                list.add(grandsonMap);
            }
        }
        System.out.println(list.toString());
    }
}