I'd use XML::Twig for that sort of task. Regardless, you'd use the same trick to get the data into your object. You don't show the code that sets up the parser and associates startElement with the start element event, but where you do that at present you probably have something like:
my $parser = XML::Parser->new(Handlers => {Start => \&startElement});
You can change that to:
my $parser = XML::Parser->new( Handlers => { Start => sub {$self->startElement(@_);} } );
then startElement becomes a member:
sub startElement { my ($self, $parseinst, $element, %attrs ) = @_;
and a complete sample would look like:
use strict; use warnings; use XML::Parser; sub new { my ($class, %params) = @_; my $self = bless \%params, $class; my $parser = XML::Parser->new( Handlers => { Start => sub {$self->startElement(@_);} } ); $parser->parse(*DATA); return $self; } sub startElement { my ($self, $parseinst, $element, %attrs ) = @_; return if $element ne $self->{id}; $self->{Property} = $attrs{Property}; } my $obj = main->new(id => 'child'); print $obj->{Property}; __DATA__ <root> <child Property='Hello World'/> </root>
In reply to Re: Create OO object from XML
by GrandFather
in thread Create OO object from XML
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |