in reply to Ugly XML processing looking for a pure XML solution
Assuming that your input XML isn't much more complicated than the above fragment (and even if it is, this can still work), a simple XML::Parser will do the trick.
#!/usr/bin/perl -w use strict; use XML::Parser; my $parser = new XML::Parser( Style => "::localParser" ); print $parser->parsefile( $ARGV[0] ); ######################################################### ######################################################### parser ######################################################### package localParser; use strict; # # called when the parser starts # sub Init { my $self = shift(); $self->{people} = []; $self->{officers} = []; $self->{text} = ''; } sub Start { my ($self, $element, %attr) = @_; $self->{text} = ''; # clear text to be sure } sub Char { my ($self, $string) = @_; $self->{text} .= $string; # append string to text } sub End { my ($self, $element) = @_; # save string in proper # category. if you have # more complicated data # (i.e. a simple array # won't do), you'll have + # to do something more + # clever if ( $element eq 'Ch_Chair' ) { push( @{$self->{officers}}, $self->{text} ); } elsif ( $element eq 'CommitteeList' ) { push( @{$self->{people}}, $self->{text} ); } $self->{text} = ''; } # # the final output # sub Final { my $self = shift(); my $officers = join("\n\t\t\t", map{ "<person>$_</person>" } @{$self->{officers}}); my $people = join("\n\t\t\t", map{ "<person>$_</person>" } @{$self->{people}}); return <<__HERE__ <doc> <perslist> <officers> $officers </officers> $people </perslist> </doc> __HERE__ } 1;
So essentially what I'm doing is parsing the data into some intermediate data structure and then outputting that as XML. I'm sure that there are other modules on CPAN that'll help you output valid XML based on some more complicated data structure, rather than this simple collection of two arrays :)
I'm not sure if this qualifies as a "pure xml solution" though!
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Ugly XML processing looking for a pure XML solution
by mirod (Canon) on Dec 15, 2000 at 13:38 UTC |