[Chicago-talk] XML::parser

/dev/mike0 mikeferrari8 at yahoo.com
Tue Feb 20 10:48:52 PST 2007


I should have edited the title in my previous email :-)
 
http://www.mikeferrari.com
http://www.chromeczars.com
http://www.hunnertcarpileup.com

----- Original Message ----
From: /dev/mike0 <mikeferrari8 at yahoo.com>
To: Chicago.pm chatter <chicago-talk at pm.org>
Sent: Tuesday, February 20, 2007 12:46:40 PM
Subject: Re: [Chicago-talk] PM T-Shirts

Hi Everyone

I am writing a small script for work to parse an xml doc and print out data from a specific tag. Its on a windows xp box with active state perl installed, no additional modules, just the defaults. I usually use XML:Simple but am wanting to learn a bit more and understand XML:Parser. I create handlers according to the perldoc and have been using an online example (http://builder.com.com/5100-6371_14-1044612-2.html) Listing A and B for reference..

I can print out start tags, character data, and end tags for the entire xml file.. My big question is.. how the heck do i just catch one specific tag? I tried using a if statement and match operator to seach for specifics but none seem to be working.

maybe its just me, its sounds pretty noob, i am feeling a bit off today.. :-) i would think its pretty simple and am sort of stuck :-)

So using the data.xml (listing B on the web page) ..the following is the approach i am taking.


use XML::Parser;
my $xmlfile = shift;
die "Cannot find file \"$xmlfile\""
       unless -f $xmlfile;
my $parser = new XML::Parser;
$parser->setHandlers( Start => \&startElement,
                        End => \&endElement,
                       Char => \&characterData,
                    Default => \&default);
$parser->parsefile($xmlfile);

sub startElement {
      my( $parseinst, $element, %attrs ) = @_;
        if ($element =~ /url/) {
        print "$element";
       }
 }

sub endElement {
      my( $parseinst, $element ) = @_;
      # do nothing, but stay quiet
 }

sub characterData {
      my( $parseinst, $data ) = @_;
        if ($data = /url/) {
        print "$data\n ";
        }
 }

sub default {

      my( $parseinst, $data ) = @_;
        # do nothing, but stay quiet
 }


The problem as i think it boils down to is.. if the xml tag is <url> i want to print out the character data between the start and end tag for it.. basically <url> print whats here</url>.

Seems simple. but i am stuck.

Thanks
Mike
 
http://www.mikeferrari.com
http://www.chromeczars.com
http://www.hunnertcarpileup.com





 
____________________________________________________________________________________
It's here! Your new message!  
Get new email alerts with the free Yahoo! Toolbar.
http://tools.search.yahoo.com/toolbar/features/mail/
_______________________________________________
Chicago-talk mailing list
Chicago-talk at pm.org
http://mail.pm.org/mailman/listinfo/chicago-talk






 
____________________________________________________________________________________
Need Mail bonding?
Go to the Yahoo! Mail Q&A for great tips from Yahoo! Answers users.
http://answers.yahoo.com/dir/?link=list&sid=396546091


More information about the Chicago-talk mailing list