Convert Treeview to XML

Das ist mal eine konkrete Frage, auf die ich antworten kann!
Du musst einen Top-Down Algorithmus schreiben, der beim root-Element aus dem TreeView (TreeView::getRoot) beginnt und jedes einzelne child dann richtig verarbeitet (TreeItem::getChildren).

Es gibt mehrere XML Frameworks für Java und Tutorials, aber mehr dazu bei Google.
 
Danke, ich sehe gerade den Wald vor lauter Bäumen nicht

in WPF C# mache ich das so

Code:
   public void exportToXml(TreeView tv)
        {
            Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();

            dlg.Filter = "Text File (*.xml)|*.xml|Show All Files (*.*)|*.*";
            dlg.Title = "Save As";
            // Nullable<bool> result = dlg.ShowDialog();

            if (dlg.ShowDialog() == true)
            {


            sr = new StreamWriter(dlg.FileName, false, System.Text.Encoding.UTF8);


            // sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
            //Write the header
            sr.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
            //Write our root node
          
            sr.WriteLine("</menu>");
            foreach (TreeViewItem node in tv.Items)
            {

                sr.WriteLine("<menu>");

                saveNode(node.Items.OfType<TreeViewItem>().ToArray());
                sr.WriteLine("</menu>");

            }

            //Close the root node
            sr.WriteLine("</>");
            sr.Close();
            }
        }

private void saveNode(TreeViewItem[] tnc)
        {
            foreach (TreeViewItem node in tnc)
            {
                //If we have child nodes, we'll write
                //a parent node, then iterrate through
                //the children

                if (node.Items.Count > 0)
                {

ich bin gerade echt zu blöd um das in JavaFX unzusetzen ;(( wie frage ich bei Java die for schleife ab??
 
Nur deine Lösung umgeschrieben:
Java:
public <T> void saveTreeView(TreeView<T> tv) {
  FileChooser fc = new FileChooser();
  File f = fc.showSaveDialog(null/* your stage */);
  if (f != null) {
    try (BufferedWriter bw = Files.newBufferedWriter(f.toPath(), StandardCharsets.UTF_8,
        StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
      bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
      saveNode(tv.getRoot(), bw);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

private <T> void saveNode(TreeItem<T> root, BufferedWriter writer) throws IOException {
  writer.write("<node>");
  writer.write(root.getValue().toString());
  for (TreeItem<T> child : root.getChildren()) {
    saveNode(child, writer);
  }
  writer.write("</node>");
}
 
Hallo, noch eine kleine Frag:

Ich frage in C# ja den Items.Count ab um die ParentItems zu selektieren. Wie mache ich das hier.

Ich habe jetzt
Java:
private <T> void saveNode(TreeItem<T> root, BufferedWriter writer) throws IOException {
        
            TreeItem<T> parent= root.getParent();
//         {
             if( parent!=null){
          writer.write("<test22>"+root.getValue().toString()+"</test22>");
        
       
           }

aber das ist nicht das selbe..
 
Hallo Danke, habs gelesen aber was gleichwertiges nicht gefunden

Das Habe ich
1
-13
2
3
Das hätte ich gern:

Code:
<menu>
<test222>1</test222>
<Item>
<name>13</name>
</Item>
<menu>
<test222>2</test222>
</menu>
<menu>
<test222>3</test222>
</menu>

Wenn ich es ohne Einschränkung durchlaufe bekommen ich das:

Code:
<menu>
<test222>1</test222>
<Item>
<test>1</test><test222>13</test222>
<Item>
<test>13</test>
</menu>

Code:
Code:
 writer.write("<test222>"+root.getValue().toString()+"</test222>");
             writer.newLine();
         writer.write("<Item>");
         writer.newLine();
         writer.write("<test>"+root.getValue().toString()+"</test>");
     
           for (TreeItem<T> child : root.getChildren()) {
         saveNode(child, writer);
      
           }
 

Zurück
Oben