天天看點

Dom4j将xml檔案内容轉為Map對象工具類

解析XML過程是通過擷取Document對象,然後繼續擷取各個節點以及屬性等操作,是以擷取Document對象是第一步,使用SAXReader、SAXWriter建立和讀取xml

public class Dom4jDemo {
    public static void main(String[] args) {
        createXml();
        readXml();
    }

    /**
     * 讀取XML檔案
     */
    private static void readXml() {
        SAXReader reader = new SAXReader();
        try {
            Map<String, Object> respMap = new HashMap<String, Object>();
            Document document = reader.read(new File("students.xml"));
            Map<String,Object> map = parseElement(document.getRootElement());
            System.out.println(new Gson().toJson(map));
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 将XML檔案内容轉換為Map對象
     * @param rootElement
     * @return
     */
    private static Map<String, Object> parseElement(Element rootElement) {
        Map<String, Object> map = new HashMap<String, Object>();
        Iterator<Element> it = rootElement.elementIterator();
        while (it.hasNext()){
            Element element = it.next();
            if (element.elementIterator().hasNext()){
                map.put(element.getName(),parseElement(element));
            }else {
                map.put(element.getName(),element.getTextTrim());
            }
        }
        return map;
    }

    /**
     * 建立XML檔案
     */
    private static void createXml() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("students");
        Element oneChildElement = root.addElement("student");
        oneChildElement.addElement("name").addText("huchx");
        oneChildElement.addElement("url").addText("www.baidu.com");
        Element twoChildElement = root.addElement("student1");
        twoChildElement.addElement("name").addText("王金");
        twoChildElement.addElement("url").addText("www.google.com");

        //自定義樣式
        OutputFormat format = new OutputFormat();
        format.setIndentSize(2);//行縮進
        format.setNewlines(true);//一個節點為一行
        format.setTrimText(true);//去除空格
        format.setPadText(true);

        try {
            XMLWriter writer = new XMLWriter(new FileOutputStream(new File("students.xml")), format);
            writer.write(document);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


           

讀取操作結果顯示為:

Dom4j将xml檔案内容轉為Map對象工具類