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

Sweet, that's exactly what I was looking for!

Thanks for the regex suggestions as well. I was actually trying the regex route before but it's something I haven't much luck with wrapping my head around so far.

Love the super fast replies here. You guys are great.

  • Comment on Re^2: extract tag content from VLC webserver via XML::Rules

Replies are listed 'Best First'.
Re^3: extract tag content from VLC webserver via XML::Rules
by rainforest1155 (Initiate) on Jun 25, 2013 at 17:12 UTC

    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.

      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!