TeeTree provides comprehensive export capabilities through the TreeExport.pas unit. Export your tree hierarchies to multiple formats including XML, HTML, JSON, Excel (XLS), and delimited text files.
All export formats preserve the hierarchical structure of your tree. Import capabilities are available through the TeeTree editor.
// For XMLExportData.Encoding := 'UTF-8';ExportData.Compact := False; // Pretty-printed// For TextTextExport.TextDelimiter := #9; // TabTextExport.TextQuotes := '"'; // Quote character
3
Export to File or String
Save the exported data:
// Save to fileFileStream := TFileStream.Create('tree.xml', fmCreate);try ExportData.SaveToStream(FileStream);finally FileStream.Free;end;// Or get as stringXMLString := ExportData.AsString;Memo1.Text := XMLString;
procedure TTreeDataXML.WriteNode(ANode: TTreeNodeShape; AStream: TStream);var t: Integer; tmpTab: String;begin if not FCompact then begin tmpTab := ''; for t := 1 to ANode.Level do tmpTab := tmpTab + TeeTabDelimiter; WriteText(tmpTab, AStream); end; WriteText( '<node name="' + ANode.Name + '" class="' + ANode.ClassName + '">' + Trim(ANode.Text.Text), AStream ); if ANode.HasChildren then begin if not FCompact then WriteText(TeeTextLineSeparator, AStream); for t := 0 to ANode.Children.Count - 1 do WriteNode(ANode.Children[t], AStream); if not FCompact then WriteText(tmpTab, AStream); end; WriteText('</node>', AStream); if not FCompact then WriteText(TeeTextLineSeparator, AStream);end;
var HTML: TTreeDataHTML;begin HTML := TTreeDataHTML.Create(Tree1); try // Save as HTML file with TFileStream.Create('tree.html', fmCreate) do try HTML.SaveToStream(TFileStream); finally Free; end; finally HTML.Free; end;end;
var JSON: TTreeDataJSON;begin JSON := TTreeDataJSON.Create(Tree1); try // Save JSON Memo1.Lines.Text := JSON.AsString; // Or save to file JSON.SaveToStream(FileStream); finally JSON.Free; end;end;
procedure TTreeDataJSON.WriteNode(ANode: TTreeNodeShape; AStream: TStream);var t: Integer;begin WriteText(' { "text": "' + ANode.SimpleText + '" ', AStream); if ANode.HasChildren then begin WriteText(', "items": [' + TeeTextLineSeparator, AStream); for t := 0 to ANode.Children.Count - 1 do WriteNode(ANode.Children[t], AStream); WriteText(' ]' + TeeTextLineSeparator, AStream); end; WriteText(' }', AStream); // Add comma if not last item if ANode.Parent = nil then begin if ANode.Tree.Roots.IndexOf(ANode) < ANode.Tree.Roots.Count - 1 then WriteText(',', AStream); end else if ANode.BrotherIndex < ANode.Parent.Children.Count - 1 then WriteText(',', AStream); WriteText(TeeTextLineSeparator, AStream);end;
procedure TTreeDataXLS.WriteNode(ANode: TTreeNodeShape; AStream: TStream);var t: Integer; s: String;begin // Write empty cells for indentation for t := 0 to ANode.Level - 1 do begin Col := t; WriteNull; // Empty cell end; // Write node text at appropriate column Col := ANode.Level; s := ANode.SimpleText; for t := 1 to ANode.Text.Count - 1 do s := s + ' ' + ANode.Text[t]; WriteText(ShortString(s)); Inc(Row); // Write children for t := 0 to ANode.Children.Count - 1 do WriteNode(ANode.Children[t], AStream);end;
The export form provides these options:From TreeExport.pas (lines 111-146):
Function TTreeExportForm.CreateData: TTeeExportData;begin Case RGText.ItemIndex of 0: begin // Text result := TTreeDataText.Create(Tree); TTreeDataText(result).TextDelimiter := GetSeparator; TTreeDataText(result).TextQuotes := EQuotes.Text; end; 1: begin // XML result := TTreeDataXML.Create(Tree); TTreeDataXML(result).Encoding := CBXMLEncoding.Text; end; 2: result := TTreeDataHTML.Create(Tree); // HTML 3: result := TTreeDataXLS.Create(Tree); // Excel else result := TTreeDataJSON.Create(Tree); // JSON end;end;