in reply to Re^2: extract tag content from VLC webserver via XML::Rules
in thread extract tag content from VLC webserver via XML::Rules

Okay, I'm stuck again. I can print the now_playing content just fine, but that's not really my intention. I would like to use the data further down the line, but can't seem to get it out of the XML-Rules parser section.

I tried to populate a string called $nowplaying with it but outside of the parser section, the string prints just empty. Obviously, the print is again just temporary so I can see that it works before I continue.

How do I get the string contents outside of the parser section? Here's what I have:

my $nowplaying = ""; my $parser = XML::Rules->new( stripspaces => 7, rules => { info => sub { $nowplaying = $_[1]->{_content} if $_[1]->{name} eq 'now_playing'; return ; } } ); $parser->parse($streaminfo); print $nowplaying;

I'm sure it's again something real simple I'm missing here.

Replies are listed 'Best First'.
Re^4: extract tag content from VLC webserver via XML::Rules
by vagabonding electron (Curate) on Jun 25, 2013 at 18:19 UTC

    Just change the line

    $nowplaying = $_[1]->{_content}

    to

    $nowplaying .= $_[1]->{_content}

    You just missed the contatenation sign. :-)

    Update: Another way could be to populate a data structure with this content, e.g. push @array,$_[1]->{_content} if ... where @array is declared outside the parser.

    Update 2:After some thoughts: in fact your version works for me in the presented example too. However I reckon that you have more than one xml in your real script so that the content is lost if you have <info name="now_playing"/>somewhere later (though you should get a warning "Use of uninitialized value" - both in original and contatenation versions (in your OP you have not "use warnings" on).

      I'm fairly new to Perl also and had a question very similar to yours - I was attempting to extract certain tags and values out of an atom feed. The discussion thread, with several examples provided, can be found here:

      http://perlmonks.org/?node_id=1039168

      I recommend the example posted by POJ as it allows you to extract values based on the tag using Rules. Very handy.

      Matt

      Adding the contatenation sign did the trick, thanks!