私のXMLは次のようになります。私は、XMLを解析中にハッシュマップを移入しようとすると、の取り込みハッシュマップ(Java)の
<?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>
問題が表示されます。私は、それぞれ異なるレベルの情報を保持するために4つのハッシュマップを使用しています。最終的なハッシュマップはセットアップ、グループ、ライトのような下位レベルからのハッシュマップで構成され、各レベルの属性はそのレベルのそれぞれのマップのキーです。
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を上書きすると、前のエントリが失われます。
ハッシュマップの「キー」は値の場所を指していることを理解しています(ここでは別のハッシュマップです)。したがって、mは混乱します。次に、すべてのxmlデータをハッシュマップに取り出すために何ができるのでしょうか。この点であなたの助けを感謝します!
私は恐れていますが、この目的のために外部ライブラリを使用することはできません。関数は次のとおりです。
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");
}
}
ありがとうございます!