JDOM - Alle Knoten als Liste - ist das möglich?

Gaup2k

Grünschnabel
Obwohl unperformant, versuche ich, alle Elemente einer XML- Datei in eine Liste zu lesen und diese Liste dann zu parsen.

Leider ist:

SAXBuilder builder = new SAXBuilder();
doc = builder.build(path);
List results = doc.getContent();

nicht erfolgreich, da ich nur one-level Ergebnisse erhalte. Ich habe schon ein wenig Erfahrung mit dem XML- Parsen und brauche nur einen Stoß in die richtige Richtung?

Also nochmal: Ich suche eine Möglichkeit eine Liste aller Elemente einer XML- Datei zu bekommen, deren Aufbau mir unbekannt ist.

Vielen Dank für eure Hilfe.
 
Willst Du nur die direkten Kinder des Root Knotens haben? oder wirklich alle Elemente? Sozusagen den JDom Baum flachkeklopft?

Gruß
 
Alle Elementente des gesamten Dokumentes - Kindes Kinder der Kindskinder - einfach alles.
Ist dies möglich einfach über die API möglich?
 
Ein Weg wäre, per XPath (ist bei JDOM dabei) einfach alle Knoten auszuwählen. Dort bekommst Du eine List zurück.

Ist leider schon eine Weile her das ich das gemacht hab, kann Dir daher nicht aus dem Kopf die genaue Syntax schreiben. Es gibt aber viele gute Beispiele im Netz.

Gruß
 
Ich will diese Vorgehensweise (manuelle aller Knoten) mit XPath vergleichen... fällt also leider aus. Gibts noch eine Funktion dafür?
 
Direkt in JDOM kenn ich da nichts. Sollte aber nicht zu schwer sein, eine rekusive Funktion zu schreiben, die ein Element und eine List überreicht bekommt und den Baum unter Element als Liste zurückgibt.

Gruß
 
Hier ist sie... falls sowas mal jmd. machen will....

private static void read_all_elements(Element elem, int i)
{

// get first node
if (!elem.getChildren().isEmpty())
{
al_nodes.add(elem.getChildren());
System.out.println("Liste: " +al_nodes);
}

i++;

// is there any child elem?
if (!elem.getChildren().isEmpty())
{
temp = elem.getChildren();
// System.err.println("Kindknoten - "+i+" -:" +elem.getChildren());
Iterator i_temp = temp.iterator();
elem = (Element) i_temp.next();
read_all_elements(elem,i);
}

// is there a sibling?
if (elem.getParentElement()!=null)
{
Element parent = elem.getParentElement();
if (!parent.getChildren().isEmpty())
{
temp = parent.getChildren();
Iterator i_temp = temp.iterator();
i_temp.next();
if (i_temp.hasNext())
{
elem = (Element) i_temp.next();
}

if (elem!=null && !elem.equals(""))
{
// Log4J.error("Geschwisterknoten - lauf "+i+" -:" +elem.getChildren());
if (!elem.getChildren().isEmpty())
{
read_all_elements(elem,i);
}
}
}
}
// strike - fuck recursive shit!
}
 
Zurück