Tree aus XML Daten aufbauen

Status
Nicht offen für weitere Antworten.

Paladin

Bekanntes Mitglied
Hi,

ich bekomme von einem fremden Programm die Daten aus einer XML Datei als ArrayList<ArrayList<String>> Objekt geliefert. Die Daten aus den ArrayLists würde ich gerne in einem JTree grafisch darstellen. In den ArrayLists sind die XML Daten wie in der Grafik dargestellt abgelegt.

Eigentlich müsste es doch möglich sein, diese ArrayLists mit einer Schleife auszulesen und daraus automatisch DefaultMutableTreeNodes zu erstellen(und entsprechend zu verknüpfen). Allerdings bekomme ich das nicht hin.

Habt ihr vielleicht einen Tipp für mich wie ich das hinbekomme?

Danke

Paladin
 

Anhänge

  • Tabelle_klein.jpg
    Tabelle_klein.jpg
    34,9 KB · Aufrufe: 77

Wildcard

Top Contributor
Hat recht wenig mit XML zu tun, daher verschieb ich das mal.
Hast du ein konkretes Problem dabei? Schon etwas versucht das du posten kannst?
 

Paladin

Bekanntes Mitglied
Zu diesem konkreten Problem habe ich noch nichts was ich zeigen kann.
Problem ist, dass ich aus diesen ArrayLists (z.B. über eine Schleife) eine Baumstruktur aus DefaultMutableTreeNodes bauen will. Aber mir fehlt hier einfach ein Ansatz wie ich an dieses Problem rangehen soll.
 

Wildcard

Top Contributor
Das sehe ich ja jetzt erst, was ist denn das für eine Kreuzdämliche Art und Weise einen Baum darzustellen :shock:
Sind in den Listen lauter 'null', oder wie ist das zu verstehen?
 

Paladin

Bekanntes Mitglied
Ja, die Art den Baum darzustellen ist nicht toll. Aber darauf habe ich keinen Einfluss. Kann ich denn aus diesen Daten über eine Schleife eine Baumstruktur erstellen?
 

Wildcard

Top Contributor
Kann man schon. Grundsätzlich wird es wohl auf die Kombination Rekursion + Schleife hinauslaufen. Entweder du gehst erst in die Tiefe, oder in die Breite, entsprechend sieht dann dein Algorithmus aus. Zerleg das ganze in Teilprobleme, bis du bei einem Trivialen Problem ankommst, so baust du dann deine Rekursion auf.
Wird vermutlich kein sehr hübscher Code, aber ist machbar.
 

Capasso

Bekanntes Mitglied
Also ich würde erstmal in eine Baumstruktur bringen und mir dann gedanken um die Visualiseirung machen.

Also erstmal ne klasse für jeden Knoten.
Dann den baum daraus aufbauen und anschließend dann visualisieren.

Evtl. helfen die folgende Klassen weiter

[highlight=Java]
public class MyTreeNode implements Visualizable {

private ArrayList<MyTreeNode> children;

private String identifier;

private boolean root;

public MyTreeNode (String ident, boolean _root){
children = new ArrayList<CharTreeNode>();
identifier = ident;
root = _root;
}

public String getIdentifier () {
return identifier;
}

public void setIdentifier (String ident) {
identifier = ident;
}

public MyTreeNode getChildrenWithIdentifier(String ident) {
for(MyTreeNode ctn : children) {
if (ctn.getIdentifier().equals(ident)) {
return ctn;
}
}
return null;
}


public MyTreeNode addAndGetChildrenWithIdentifier(String ident) {
CharTreeNode ctn = this.getChildrenWithIdentifier(ident);
if (ctn == null) {
ctn = new MyTreeNode(ident, false);
children.add(ctn);
}
return ctn;
}

// Methods from Visualizable Interface
//--------------------------------------------------------------------------------
@Override
public String getIdentifierAsVisualString() {
if (root) {
return "";
}
return String.valueOf(identifier);
}
@Override
public ArrayList<? extends Visualizable> getVisualizableChildren() {
return children;
}
}
[/highlight]

[highlight=Java]
public interface Visualizable extends TreeNodeInt {
/**
* Liefert den Textstring zum Knoten
*/
public String getIdentifierAsVisualString();

/**
* Liefert alle Kinder des Knoten die ebenfalls das Interface Visualizable implementieren
*/
public ArrayList<? extends Visualizable> getVisualizableChildren();

}
[/highlight]

[highlight=Java]
public class TreeVisualizer {

public static DefaultMutableTreeNode getVisualTreeNode(Visualizable node) {
String fullword = "";
if (node.isEnd()) {
fullword = " ("node.getIdentifierAsVisualString()+")";
}
DefaultMutableTreeNode curNode = new DefaultMutableTreeNode(node.getIdentifierAsVisualString());
for (Visualizable v:node.getVisualizableChildren()) {
curNode.add(TreeVisualizer.getVisualTreeNode(v);
}
return curNode;
}


}

[/highlight]
 

Paladin

Bekanntes Mitglied
Hi Capasso,

danke für die Hilfestellung. Ich versuche mal damit das Problem zu lösen.

Gruß

Paladin
 

slawaweis

Bekanntes Mitglied
Habt ihr vielleicht einen Tipp für mich wie ich das hinbekomme?

ich habe es jetzt zwar nicht direkt getestet, aber der Algorithmus sollte ungefähr so ablaufen:

[highlight="java"]
public processXMLTable()
{
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
processNode(root, 0, 0);
}

public int processNode(DefaultMutableTreeNode parent, int x, int y)
{
// prüft, ob in der Zelle X und Y Daten vorhanden sind
if(hasData(x, y))
{
// falls ja, wird ein neuer Knoten mit den Daten aus X und Y an den Parent angehängt
DefaultMutableTreeNode node = new DefaultMutableTreeNode(getData(x, y));
parent.addNode(n);

// da es nur einen Knoten pro Zeile geben kann ...
int next_row = y+1;

// ... testen wir, ob in der nächsten Zeile ein Kindknoten vorkommt, also (x+1, y+1)
// und arbeiten den rekursiv ab, mit den node als Elternknoten.
next_row = processNode(node, x+1, next_row);

// ... testen wir, ob in der nächsten Zeile ein Nachfolger des node auf der selben Ebene ist,
// also (x, y+[Anzahl möglicher Kinder von node]+1) und arbeiten den rekursiv ab, mit dem
// parent als Elternknoten.
next_row = processNode(parent, x, next_row);

return next_row;
}

return y;
}

protected boolean hasData(int x, int y)
{
// prüft, ob X und Y überhaupt im Rahmen der List-Tabelle liegen
// und ob Daten an der Position vorhanden sind
}

protected Object getData(int x, int y)
{
// holt die Daten aus der List-Tabelle an der Position X und Y
}
[/highlight]

EDIT: mit einem Stack wäre auch eine reine Schleifenlösung möglich.

Slawa
 
Zuletzt bearbeitet:

Saxony

Top Contributor
Hiho,

in meinem Kapitel zu Legay Code unter Java sieht man zufällig wie man durch einen kompletten XML Baum läuft. Du musst nur noch die System.out.println durch entsprechende TreeNode Erzeugung ersetzen und fertig.

Java Blog Buch : 07.06 Legacy Code

bye Saxony
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
RudiRüssel Tree Java Basics - Anfänger-Themen 3
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
S Binary Search Tree - Nummerierung in Inorder Java Basics - Anfänger-Themen 5
P expression tree Java Basics - Anfänger-Themen 4
T Expression Tree.. identifier + Grundaufbau? Java Basics - Anfänger-Themen 2
A Anzahl nodes in einem Tree Java Basics - Anfänger-Themen 2
L Linksrotation RedBlack Tree Java Basics - Anfänger-Themen 3
M AVL Tree Java Basics - Anfänger-Themen 4
L Binear Tree Java Basics - Anfänger-Themen 5
L File Tree Node ausgeben Java Basics - Anfänger-Themen 2
L File Tree rekursiv Java Basics - Anfänger-Themen 10
V libssrckdtree-j Generic k-d tree Java library - weiss nicht wo des hin soll Java Basics - Anfänger-Themen 2
T Java Tree Frage Java Basics - Anfänger-Themen 2
R Tree gefüllt mit den Directory Java Basics - Anfänger-Themen 2
B API für Tree Java Basics - Anfänger-Themen 4
M Pfade in Tree einbinden Java Basics - Anfänger-Themen 2
R Multiway Tree Java Basics - Anfänger-Themen 3
G tree rekursiv Java Basics - Anfänger-Themen 8
R Tree + bilder ? Java Basics - Anfänger-Themen 7
M Minimal Spanning Tree mit Greedy Java Basics - Anfänger-Themen 2
J Erweitern eines Tree-Pfades? Java Basics - Anfänger-Themen 3
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
W Best Practice problemabhängige Persistentmachung von Daten Java Basics - Anfänger-Themen 6
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
D Daten mit Apache POI in eine Excel Datei schreiben Java Basics - Anfänger-Themen 5
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
T printf Daten aus der Tabelle in Excel übernehmen Java Basics - Anfänger-Themen 5
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
V Einlesen von Daten Java Basics - Anfänger-Themen 8
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
J Daten im Programm speichern Java Basics - Anfänger-Themen 14
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
O Probleme mit CSV Daten Java Basics - Anfänger-Themen 10
M Arrays: Trennung von Daten und Darstellung Java Basics - Anfänger-Themen 1
S Daten aus Array in Klasse übertragen Java Basics - Anfänger-Themen 12
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben