#!/usr/bin/perl -w use strict; use XML::Twig; my $t= XML::Twig->new(load_DTD => 1, error_context => 1)->parsefile( 'test.xml'); my @elts= $t->model; print "all elements: ", join( ', ', @elts), "\n"; foreach my $elt (@elts) { my $model= $t->model( $elt); print "model of $elt: $model\n"; my @subelts= grep { $_ && $_ ne 'PCDATA'} split( /[^\w:-]/, $model); # keep only element names # if you want an array of unique element names you then need this my %subelts= map { $_ => 1 } @subelts; @subelts= sort keys %subelts; print "elements in $elt: ", join( ', ', @subelts), "\n"; }