Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;

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

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main {
    public static Object transformXmlNodesIntoMap(NodeList nodes) {
        Map<String, Object> nodeMap = new HashMap<String, Object>();

        if (nodes.getLength() == 1 && nodes.item(0).getNodeType() == Node.TEXT_NODE)
            return nodes.item(0).getTextContent();

        for (int nodeIdx = 0; nodeIdx < nodes.getLength(); nodeIdx++) {
            Node node = nodes.item(nodeIdx);
            NodeList subNodes = node.getChildNodes();

            if (node.getNodeType() != Node.TEXT_NODE)
                nodeMap.put(node.getNodeName(), transformXmlNodesIntoMap(subNodes));
        }
        return nodeMap;
    }

    public static Object transformXmlNodesIntoMap(Node node) {
        Map<String, Object> nodeMap = new HashMap<String, Object>();

        NodeList subNodes = node.getChildNodes();

        NamedNodeMap nodeAttrs = node.getAttributes();
        for (int nodeAttrIdx = 0; nodeAttrIdx < nodeAttrs.getLength(); nodeAttrIdx++) {
            Node attrNode = nodeAttrs.item(nodeAttrIdx);
            nodeMap.put("@" + attrNode.getNodeName(), attrNode.getTextContent());
        }

        if (nodeAttrs.getLength() == 0)
            if (subNodes.getLength() == 0)
                return "";
            else if (subNodes.getLength() == 1 && subNodes.item(0).getNodeType() == Node.TEXT_NODE)
                return subNodes.item(0).getTextContent();

        for (int subNodeIdx = 0; subNodeIdx < subNodes.getLength(); subNodeIdx++) {
            Node subNode = subNodes.item(subNodeIdx);

            if (subNode.getNodeType() == Node.TEXT_NODE) {
                nodeMap.put(subNode.getNodeName(), subNode.getTextContent());
            } else {
                if (nodeMap.containsKey(subNode.getNodeName())) {
                    Object subObject = nodeMap.get(subNode.getNodeName());
                    if (subObject instanceof List<?>) {
                        ((List<Object>) subObject).add(transformXmlNodesIntoMap(subNode));
                    } else {
                        List<Object> subObjectList = new ArrayList<Object>();
                        subObjectList.add(subObject);
                        subObjectList.add(transformXmlNodesIntoMap(subNode));
                        nodeMap.put(subNode.getNodeName(), subObjectList);
                    }
                } else {
                    nodeMap.put(subNode.getNodeName(), transformXmlNodesIntoMap(subNode));
                }
            }

        }
        return nodeMap;
    }
}