in reply to Extracting data from XML file

Why do you want to get the result either in an array or in a scalar? Why not always get an array and always process it the same way? Why special case 1-element arrays?

Whichever you choose, XML::Simple can do it. If you want to always get an array use the ForceArray option, otherwise don't.

If you are only interested in the data in the State elements, then you can use a number of other modules, XML::LibXML, XML::Rules, or my XML::Twig.

Replies are listed 'Best First'.
Re^2: Extracting data from XML file
by derby (Abbot) on Feb 23, 2010 at 15:26 UTC

    ++ for always treating it as an array.

    #!/usr/local/bin/perl use strict; use warnings; use XML::LibXML; my $xml = <<_XML; <GEN_FSM> <State> <Name>POWERED</Name> <Comment>USB POWERED State</Comment> </State> <State> <Name>DEFAULT</Name> <Comment>USB DEFAULT State</Comment> </State> <State> <Name>ADDRESS</Name> <Comment>USB ADDRESS State</Comment> </State> <Rst_Arc> <To_State>DEFAULT</To_State> <monitor_mode_event_name>HOT_RST</monitor_mode_event_name> <monitor_mode_event_count>1</monitor_mode_event_count> <comment>HOT_reset_to_DEFAULT</comment> </Rst_Arc> </GEN_FSM> _XML my $parser = XML::LibXML->new(); my $doc = $parser->parse_string( $xml ); my $root = $doc->getDocumentElement; my @nodes = $root->findnodes( '/GEN_FSM/State/Name' ); foreach my $node ( @nodes ) { print $node->textContent, "\n"; }
    -derby