For example, let's run your sample XML through XML::Simple. I'll use the built-in DATA filehandle, so if you run this be sure you include it:
When run on a computer that has XML::Simple installed, you should see something like:use XML::Simple; use Data::Dumper; my $xml = XMLin(\*DATA); print Dumper $xml; __DATA__ <ObjectType> <AppObject>hello</AppObject> <AppObjectField>gender</AppObjectField> <valueTargetPair value="MALE" targetPo="Incoming 1" /> <valueTargetPair value="FEMALE" targetPo="Incoming 2" /> </ObjectType>
Now ... let's turn it into an object:$VAR1 = { 'AppObject' => 'hello', 'valueTargetPair' => [ { 'value' => 'MALE', 'targetPo' => 'Incoming 1' }, { 'value' => 'FEMALE', 'targetPo' => 'Incoming 2' } ], 'AppObjectField' => 'gender' };
Done. ;) But don't be fooled. $xml is still a reference to an anonymous hash reference, it just also happens to "BE A" 'hello' object. Now, let's run tadman's code on this (with a couple of modifications), but this time i won't bother blessing it, since there is no reason to for this simple example:my $xml = XMLin(\*DATA); bless $xml, $xml->{AppObject}; warn unless ref $xml eq 'hello';
This prints:my $xml = XMLin(\*DATA); foreach my $entry (@{$xml->{valueTargetPair}}) { print "value=", $entry->{value}, $/; print "targetPo=", $entry->{targetPo}, $/; }
Hope this convinces you to stick with parsers for parsing XML. The work has not only already been done, it's been tried and tested. ;)value=MALE targetPo=Incoming 1 value=FEMALE targetPo=Incoming 2
jeffa
L-LL-L--L-LL-L--L-LL-L-- -R--R-RR-R--R-RR-R--R-RR B--B--B--B--B--B--B--B-- H---H---H---H---H---H--- (the triplet paradiddle with high-hat)
In reply to 3Re: HoAoH
by jeffa
in thread hashes, arrays, and references... oh my
by regan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |