Ich habe folgendes xml:
LEVEL_1-Value_1
LEVEL_1-Value_2
LEVEL_2-Value_1
LEVEL_4-Value_1
LEVEL_4-Value_2
LEVEL_4-Value_3
Value_251
Value_252
Value_253
Value_254
Value_255
Value_256
Value_257
Value_258
Ich muss die Knotenpfade mit dem Wert in Java ausgeben. Hier ist ein Beispielausgang, den ich erhalten muss:
RootNode.Node_11 = LEVEL_1-Value_1
RootNode.Node_12 = LEVEL_1-Value_2
RootNode.Node_13.Node_121 = LEVEL_2-Value_1
RootNode.Node_14.Node_121.Node_1231.Node_12341 = LEVEL_4-Value_1
RootNode.Node_14.Node_121.Node_1231.Node_12342 = LEVEL_4-Value_2
RootNode.Node_14.Node_121.Node_1231.Node_12343 = LEVEL_4-Value_3
RootNode.Node_15.Node_25.Node_251 = Value_251
RootNode.Node_15.Node_25.Node_252 = Value_252
RootNode.Node_15.Node_25.Node_251 = Value_253
RootNode.Node_15.Node_25.Node_252 = Value_254
RootNode.Node_15.Node_25.Node_251 = Value_255
RootNode.Node_15.Node_25.Node_252 = Value_256
RootNode.Node_15.Node_25.Node_251 = Value_257
RootNode.Node_15.Node_25.Node_252 = Value_258
Hier ist mein letzter Java-Code. Ich kann nicht erreichen, dass er richtig funktioniert.
public class Read_XML {
static String rootTag = "";
static HashMap valueMap = new HashMap();
public static void main(String arg[]) throws IOException, AxiomRuntimeException
{
File inFile = new File("C:/Test.xml");
FileReader fr = new FileReader(inFile);
BufferedReader br = new BufferedReader(fr);
String sXML = "";
for (String line; (line = br.readLine())!= null;)
{
sXML += line;
}
Document doc = XMLStringParser.parseString(sXML);
Element root = doc.getDocumentElement();
rootTag += root.getTagName();
NodeList rootList = doc.getElementsByTagName("RootNode");
Element rootList_node = (Element) rootList.item(0);
NodeList kids = rootList_node.getChildNodes();
for(int i = 0; i < kids.getLength(); i++)
{
String nextTag = "";
if(kids.item(i) instanceof Element)
{
nextTag = rootTag + "." + kids.item(i).getNodeName();
int level = 0;
processChildNode(kids.item(i).getChildNodes(), nextTag, level);
}
}
Iterator it = valueMap.keySet().iterator();
for (;it.hasNext();)
{
String key = it.next().toString();
String val = valueMap.get(key).toString();
System.out.println(key + " = " + val );
}
}
public static void processChildNode(NodeList listOfNodes, String tags, int level)
{
String tagPath = tags;
int curLevel = 0;
for(int i = 0; i < listOfNodes.getLength(); i++)
{
System.out.println("Node Name = " + listOfNodes.item(i).getNodeName());
if(listOfNodes.item(i) instanceof Element)
{
if(curLevel == level + 1)
{
tagPath = tags;
}
else
{
curLevel = level +1;
tagPath += "." + listOfNodes.item(i).getNodeName();
}
if(listOfNodes.item(i).getChildNodes().getLength() >= 1)
{
processChildNode(listOfNodes.item(i).getChildNodes(), tagPath, curLevel);
}
}
else if(listOfNodes.item(i) instanceof Text && listOfNodes.getLength() == 1)
{
String value = listOfNodes.item(i).getNodeValue();
valueMap.put(tagPath, value);
}
}
}
}
Hier ist die aktuelle Ausgabe :
RootNode.Node_15.Node_25.Node_251 = Value_251
RootNode.Node_14.Node_121.Node_1231.Node_12341 = LEVEL_4-Value_1
RootNode.Node_12 = LEVEL_1-Value_2
RootNode.Node_15 = Value_258
RootNode.Node_14.Node_121.Node_1231 = LEVEL_4-Value_3
RootNode.Node_15.Node_25 = Value_252
RootNode.Node_11 = LEVEL_1-Value_1
RootNode.Node_15.Node_251 = Value_257
RootNode.Node_13.Node_121 = LEVEL_2-Value_1
Bitte helfen Sie mir, dass es richtig funktioniert. Vielen Dank.