# Frage zu Tree Traversal



## breakpoint (6. Mai 2016)

Wie man sieht, hänge ich die ganze Baumstruktur an einer TreeItem-Root-Node auf. Die möcht ich aber weghaben, und nur den XML-Baum. Hat jemand einen Vorschlag, wie ich die auf intelligente Weise wegbekomme? Es gibt bestimmt einen Ansatz, bei dem man die root-Node auf diese Weise gar nicht braucht, um eine Referenz auf den TreeItem-Baum zu erhalten.

Danke euch 


```
package com.test;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom2.*;
import org.jdom2.input.*;

import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;

public class MainWindow extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        SAXBuilder builder = new SAXBuilder();
        File xmlFile = new File("file4.xml");
        TreeItem<String> rootItem = new TreeItem<String>("root");
        rootItem.setExpanded(true);

        try {
            Document document = (Document) builder.build(xmlFile);
            Element root = document.getRootElement();

            traverse(root, rootItem);
        } catch (Exception ex) {
        }

        TreeView<String> tree = new TreeView<String>();
        tree.setRoot(rootItem);

        StackPane root = new StackPane();
        root.getChildren().add(tree);

        primaryStage.setScene(new Scene(root, 300, 350));
        primaryStage.show();
    }

    public static void traverse(Element current, TreeItem curItem) {

        String attr = current.getAttributeValue("name");
        String label = attr;

        TreeItem<String> newItem = new TreeItem<String>(label);

        newItem.setExpanded(true);
        curItem.getChildren().add(newItem);
        List children = current.getChildren();
        Iterator iterator = children.iterator();

        while (iterator.hasNext()) {
            Element child = (Element) iterator.next();
            traverse(child, newItem);
        }
    }

}
```


----------



## Flown (7. Mai 2016)

`tree.setShowRoot(false);` ist wahrscheinlich das was du suchst.


----------



## breakpoint (13. Mai 2016)

Danke, das hat weitergeholfen. 
Schaue mir gerade eine iterative Methode an, um die Rekursion zu umgehen.


----------

