Seit einiger Zeit versuche ich schon ein XML Dokument zu parsen. Die Hierarchie geht dabei auf ca. 8 Ebenen tief.
Ich möchte im Grunde genommen, die Struktur des XML als Baum speichern. Ich habe auch eine Klasse Tree (von Google Inc. 2007). Das Dokument „lese“ ich mit XPath. Dabei lassen sich die Elemente auch ausgeben - allerdings nicht hierarchisch geordnet.
Und daher möchte ich „einfach“ die Elemente des XML Dokuments als Baum speichern, so dass mir für spätere Verwendung auch die genauen Pfadangaben quasi erhalten bleiben … und genau das geht nicht. Stattdessen erstellt er mir im src-Ordner eine core.XXXX.XXXX-Datei und Fehlermeldungen (JVMDUMP039I / JVMDUMP032I).
Ich habe auch eine Klasse Tree (von Google Inc.2007).
Und daher möchte ich „einfach“ die Elemente des XML Dokuments
als Baum speichern, so dass mir für spätere Verwendung auch
die genauen Pfadangaben quasi erhalten bleiben … und genau
das geht nicht.
Fehler in geheimem Code zu finden ist immer schierig, ein Quick ‚n‘ Dirty Beispiel mit der angegebenen Tree Klasse fuktioniert bei mir einwandfrei
public class TreeTest {
public static void main(String[] args) {
Tree t = new Tree("root");
Tree child1 = t.addLeaf("element\_1");
child1.addLeaf("subelement\_1");
child1.addLeaf("subelement\_2");
Tree child2 = t.addLeaf("element\_2");
child2.addLeaf("subelement\_1");
child2.addLeaf("subelement\_2");
System.out.println(t);
}
}
deine Parser-Methode berücksichtigt das übergebene Node-Objekt im XPath Ausdruck überhaupt nicht sondern ermittelt die NodeList immer auf Basis des gesamten Dokumentes. Daher läuft dein Programm in eine Endlosschleife:
public static void Parser(Node node)
{
try
{
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/\*/descendant::\*";
// xmltree ist immer das Originaldokument
NodeList nodeList = (NodeList)xpath.evaluate(expression, xmltree, XPathConstants.NODESET);
for (int i = 0; i
Den catch-Block leer zu lassen ist übrigens auch keine gute Idee, du bekommst so ja gar nicht mit wenn ein Fehler auftritt. Zumindest ein System.err.println(e.getMessage(); und e.printStrackTrace() sollte da rein (alternativ ein Logging Framework nutzen).
Wenn du statt des XPath Ausdrucks einfach die ChildNodes ermittelst solltest du einen Schritt weiter sein:
NodeList nodeList = node.getChildNodes();
HTH
Heavy