从xml(java)填充hashmap

从xml(java)填充hashmap,java,xml,xml-parsing,hashmap,java-8,Java,Xml,Xml Parsing,Hashmap,Java 8,我的xml看起来像: <?xml version="1.0"?> <Grid id = 1> <Setup id = "1"> <Group name = "DrawingRoom"> <Light id = "1"> <name>Light1</name> <type>ben</ty

我的xml看起来像:

<?xml version="1.0"?>
<Grid id = 1>
    <Setup id = "1">
        <Group name = "DrawingRoom">
            <Light id = "1">
                <name>Light1</name>
                <type>ben</type>
                <index>1</index>
            </Light>
            <Light id = "2">
                <name>Light2</name>
                <type>crux</type>
                <index>2</index>
            </Light>
            <Light id = "3">
                <name>Light3</name>
                <type>let</type>
                <index>3</index>
            </Light>
        </Group>
        <Group name = "BedRoom">
            <Light id = "1">
                <name>Light1</name>
                <type>let</type>
                <index>4</index>
            </Light>
        </Group>
    </Setup>
    <Setup id = "2">
        <Group name = "ClubRoom">
            <Light id = "1">
                <name>Light1</name>
                <type>let</type>
                <index>1</index>
           </Light>
       </Group>
   </Setup>
</Grid>

灯光1
本
1.
灯光2
症结
2.
灯光3
让
3.
灯光1
让
4.
灯光1
让
1.
在解析xml时尝试填充hashmap时出现问题。我使用四个hashmap分别保存不同级别的信息。因此,最终的hashmap由较低级别的hashmap组成,如setup、group和light,每个级别的属性都是该级别相应映射的键

    public HashMap<String,String> lightContent = new HashMap<String,String>();
    public HashMap<String, HashMap<String,String>> groupContent = new HashMap<String, HashMap<String,String>>();
    public HashMap<String, HashMap<String, HashMap<String,String>>>  setupContent = new HashMap<String, HashMap<String, HashMap<String,String>>>();
    public HashMap<String, HashMap<String, HashMap<String, HashMap<String,String>>>> gridContent = new HashMap<String, HashMap<String, HashMap<String, HashMap<String,String>>>>();
public HashMap lightContent=new HashMap();
public HashMap groupContent=new HashMap();
public HashMap setupContent=new HashMap();
public HashMap gridContent=new HashMap();
在解析过程中,问题在于随着hashmap的更新,包含这些hashmap的hashmap也会自动更新。因此,当覆盖较低级别的hashmap时,以前的条目将丢失

我知道hashmap中的“键”指向值的位置(这里是另一个hashmap)。因此,我很困惑,下一步该怎么做才能将所有xml数据检索到hashmap。感谢你在这方面的帮助

恐怕,我不能为此目的使用任何外部图书馆。以下是函数:

    public void getSetupConfiguration()
    {
        try {

            File fXmlFile = new File("D:\\SetupConfig.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            NodeList nodeList = doc.getChildNodes();


            if (doc.hasChildNodes())
                {
                for (int count1 = 0; count1 < nodeList.getLength(); count1++) 
                    {
                    System.out.println(nodeList.getLength());
                Node gridNode = nodeList.item(count1);
                if (gridNode.getNodeType() == Node.ELEMENT_NODE) 
                    {
                    String presentNodeName = gridNode.getNodeName();
                    // get node name and value
    //                  System.out.println("\nNode Name =" + presentNodeName);

                    if (presentNodeName.equalsIgnoreCase("Grid"))
                        {
                        if (gridNode.hasChildNodes())
                            {
                            Node setupNode = gridNode.getFirstChild();
                            while (setupNode != null)
                                {
                                if (setupNode.getNodeType() == Node.ELEMENT_NODE) 
                                    {
                                    System.out.println(setupNode.getNodeName());
                                    //Getting group
                                    Node groupNode = setupNode.getFirstChild();
                                    while (groupNode != null)
                                        {
                                        if (groupNode.getNodeType() == Node.ELEMENT_NODE) 
                                            {
                                                System.out.println(groupNode.getNodeName());
                                            // Getting lights
                                            Node lightNode = groupNode.getFirstChild();
                                            while (lightNode != null)
                                                {
                                                if (lightNode.getNodeType() == Node.ELEMENT_NODE)
                                                    {
                                                    System.out.println(lightNode.getNodeName());
                                                    // Getting individual lights
                                                    Node lights = lightNode.getFirstChild();
                                                    while (lights != null)
                                                        {
                                                        if (lights.getNodeType() == Node.ELEMENT_NODE)
                                                            {
                                                            lightContent.put(lights.getNodeName(), lights.getTextContent());
                                                            System.out.println("aaa");
                                                            }
                                                            lights = lights.getNextSibling();


                                                        }
                                                    NamedNodeMap lightMap = lightNode.getAttributes();
                                                    String lightId = "";
                                                    // To get id of Light element
                                                    for (int i = 0; i < lightMap.getLength(); i++ )
                                                    {                                       
                                                        Node lightItem = lightMap.item(i);
                                                        lightId = lightItem.getNodeValue(); 
                                                    }

                                                    groupContent.put(lightId, lightContent);
                                                    System.out.println(groupContent);

                                                    }

                                                    lightNode = lightNode.getNextSibling();

                                                }// Populating Light Node Ends
                                            NamedNodeMap groupMap = groupNode.getAttributes();
                                            String groupName = "";

                                            for (int i = 0; i < groupMap.getLength(); i++ )
                                            {                                       
                                                Node lightItem = groupMap.item(i);
                                                groupName = lightItem.getNodeValue();   
                                            }
                                            setupContent.put(groupName, groupContent);
                                            System.out.println(setupContent);
                                            }
                                            lightContent.clear();
                                            groupContent.clear();
                                            System.out.println(lightContent);
                                            groupNode = groupNode.getNextSibling();
                                        }
                                    }
                                if (setupNode.getNodeType() == Node.ELEMENT_NODE) 
                                {
                                    NamedNodeMap setupMap = setupNode.getAttributes();
                                    String setUpId = "";

                                    for (int i = 0; i < setupMap.getLength(); i++ )
                                    {                                       
                                        Node lightItem = setupMap.item(i);
                                        setUpId = lightItem.getNodeValue(); 
                                    }
                                    gridContent.put(setUpId, setupContent);
                                    System.out.println(gridContent);
                                    setupContent.clear();
                                }

                                setupNode = setupNode.getNextSibling();
                                }

                            }
//                          gridNode = gridNode.getNextSibling();

                            }
                    }
                }
            }
            System.out.println(gridContent);
            }
            catch (Exception e) 
            {
            e.printStackTrace();
            }



        System.out.println("Wow");
    }
    }
public void getSetupConfiguration()
{
试一试{
File fXmlFile=新文件(“D:\\SetupConfig.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
NodeList NodeList=doc.getChildNodes();
if(doc.hasChildNodes())
{
对于(int count1=0;count1