in reply to Retrieving a List of XML Tag Names from Given File
If I wanted to do this as a one-off, then I'd use XML-PYX and a shell one-liner like this:
pyx xcard.xml | perl -nle '/^\((\S+)/ && print $1' | sort -u
To do it programmatically, I'd probably use XML-SAX:
#!/usr/bin/perl -w use warnings; use strict; use XML::SAX::ParserFactory; my $handler = TagListHandler->new; my $parser = XML::SAX::ParserFactory->parser(Handler => $handler); my $filename = shift or die "No filename\n"; my $tags = $parser->parse_uri($filename); print "$_\n" foreach @$tags; exit; package TagListHandler; use base qw(XML::SAX::Base); sub start_element { my($self, $data) = @_; $self->{tag}->{ $data->{Name} } = 1; } sub end_document { my($self) = @_; my @tags = sort keys %{ $self->{tag} || {} }; return \@tags; }
If you install XML::SAX you'll get a pure Perl parser so you'll also want to install a faster parser module like XML-SAX-Expat.
|
|---|