use strict; use GraphViz; use XML::Twig; # mkg($xml, $output_file_name) mkg("@{[]}", "orgchart"); sub mkg { my ($xml, $file) = @_; my $root = XML::Twig->new()->parse($xml)->root; my $g = GraphViz->new(); render($g, $root); $g->as_jpeg("$file.jpg"); } sub render { my ($g, $root) = @_; my $super = mkname($root); $g->add_node($super); foreach my $child ($root->children) { my $subord = mkname($child); $g->add_edge($super => $subord, dir => 'back'); render($g, $child); } } sub mkname { $_[0]->att('title') . " (" . $_[0]->att('name') . ")"; } __DATA__