in reply to XML::Simple Meets Complex Hash Structure
Switching to a less simple, but simplifying module such as XML::Twig may help. Consider:
use strict; use warnings; use XML::Twig; my $twig = XML::Twig->new ( twig_handlers => { Preroll => \&handleNode, Midroll => \&handleNode, Postroll => \&handleNode, } ); $twig->parse (do {local $/; <DATA>}); sub handleNode { my ($tag, $elt) = @_; my $creative = $elt->first_child ('Creative'); print "Creative: ", $creative->text (), "\n"; } __DATA__
<AdXML> <Preroll> <Creative>Preroll_30sec</Creative> <CompanionId>N/A</CompanionId> <Impression>TBD</Impression> <Completion>http://192.168.0.1:80/foo/bar</Completion> <TrackingId>null:414</TrackingId> <Length>4</Length> </Preroll> <Postroll> <Creative>Postroll_60sec</Creative> <CompanionId>N/A</CompanionId> <Impression>TBD</Impression> <Completion>http://192.168.0.1:80/foo/bar</Completion> <TrackingId>null:418</TrackingId> <Length>6</Length> </Postroll> <Midroll> <Creative>Midroll_45sec_3</Creative> <CompanionId>N/A</CompanionId> <Impression>TBD</Impression> <Completion>http://192.168.0.1:80/foo/bar</Completion> <TrackingId>null:417</TrackingId> <Length>5</Length> </Midroll> <Midroll> <Creative>Midroll_45sec_1</Creative> <CompanionId>N/A</CompanionId> <Impression>TBD</Impression> <Completion>http://192.168.0.1:80/foo/bar</Completion> <TrackingId>null:415</TrackingId> <Length>5</Length> </Midroll> <Midroll> <Creative>Midroll_45sec_2</Creative> <CompanionId>N/A</CompanionId> <Impression>TBD</Impression> <Completion>http://192.168.0.1:80/foo/bar</Completion> <TrackingId>null:416</TrackingId> <Length>5</Length> </Midroll> </AdXML>
Prints:
Creative: Preroll_30sec Creative: Postroll_60sec Creative: Midroll_45sec_3 Creative: Midroll_45sec_1 Creative: Midroll_45sec_2
|
|---|