Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Munging a XML data

by mexnix (Pilgrim)
on Aug 06, 2001 at 23:14 UTC ( [id://102558]=perlquestion: print w/replies, xml ) Need Help??

mexnix has asked for the wisdom of the Perl Monks concerning the following question:

Right now I'm developing a "news" kinda thing for a site I'm working on, and if it works well (a relative term), I may use it else where. I'm using XML to create "news listing" and post them on the front page of the site. Thank God for XML::Simple! It make the conversion process very...well, simple. My problem is in-between convertions.

First I parse my XML file into a ref (my $data = XMLin('./this.xml')). Data::Dumper would print something like this:

$VAR1 = { 'news' => [ { 'title' => 'news1', 'content' => 'Article Contents...blah', 'date' => '08-03-01' }, { 'title' => 'news2', 'content' => 'Article Contents...blah', 'date' => '07-20-01' } ] };

Then I want to be able to delete a user specified ($match) entry from the file (perl psuedo-code: DELETE ENTRY from $data->{news} WHERE ENTRY->{title} is $match). I'm confused on how to do this because 'news' is an anon array of hashrefs. I tried a few things, but my only real idea would be to shift each entry individually see if they match, then push them back if I don't want to delete them. There has got to be a better way.

__________________________________________________
<moviequote name="Hackers">
The Plague: [...]Well let me explain the New World Order. Governments and corporations need people like you and me. We are samurai. The keyboard cowboys. And all those other people out there who have no idea what's going on are the cattle. Mooo!
</moviequote>

mexnix.perlmonk.org

Replies are listed 'Best First'.
(ar0n) Re: Munging a XML data
by ar0n (Priest) on Aug 06, 2001 at 23:18 UTC
    Use splice:
    my $match = qr/foo|bar/; for my $i (0 .. $#{ $ref->{news} }) { if ( $ref->{news}[$i]{title} =~ $match ) { splice @{ $ref->{news} }, $i, 1; } }


    ar0n ]

Re: Munging a XML data
by kilinrax (Deacon) on Aug 06, 2001 at 23:22 UTC
    I think this is an ideal place to use grep:
    #!/usr/bin/perl -w use strict; use Data::Dumper; my $data = { 'news' => [ { 'title' => 'news1', 'content' => 'Article Contents...blah', 'date' => '08-03-01' }, { 'title' => 'news2', 'content' => 'Article Contents...blah', 'date' => '07-20-01' } ] }; @{ $data->{news} } = grep { $_->{title} ne 'news1' } @{ $data->{news} +}; print Dumper(\$data);
Re: Munging a XML data
by davorg (Chancellor) on Aug 07, 2001 at 12:20 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://102558]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2024-03-29 15:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found