我的XML是这样的:当我尝试填充的HashMap在解析XML出现填充从XML(JAVA)的HashMap
<?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>
问题。我使用四个hashmap来保存不同级别的信息。因此,最终的hashmap包含来自较低级别的hashmap,如设置,组和灯光,每个级别的属性都是该级别各个映射的关键。
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>>>>();
在分析过程中,问题是随着哈希映射得到更新,自动包含这些哈希映射的哈希映射。因此,当较低级别的hashmap被覆盖时,以前的条目会丢失。
我知道hashmap中的“key”指向值的位置(这里是另一个hashmap)。因此,m感到困惑,接下来可以做什么来检索所有的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");
}
}
感谢提前!