Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re: Re: XML parsing

by geekoid (Initiate)
on Mar 19, 2002 at 21:33 UTC ( #152850=note: print w/replies, xml ) Need Help??

in reply to Re: XML parsing
in thread XML parsing

Thank you. bad news, our box does not have XML/ on it, and no, they won't add it because its their machine damn it, and I'll need to find another way to do it. There is nothing like cooperation, and our systems people our nothing like cooperative.

Replies are listed 'Best First'.
Re(3): XML parsing
by FoxtrotUniform (Prior) on Mar 19, 2002 at 22:09 UTC

    Does your box have XML::Parser on it? Install XML::Simple in your user space, then. Yes, it's a pain. Yes, it's worth it. XML parsing is a complex, often subtle problem that's difficult to get right -- so let other people get it right, and use the wheels they invent.

    If you don't have the requisite modules for XML::Simple (and that includes a compiled Expat library, IIRC), you're in deeper trouble. You might have some luck with XML::Parser::Lite, which I haven't tried but seems to be entirely Perl-based. If you insist on building your own parser, consider using XML::RegExp.

    It might be easier to seek a political solution to the problem (i.e. have your manager lean on the systems people until XML/ appears in your @INC).

    I don't mean to be condescending, but parsing XML really is a lot harder than you think. Writing a half-assed collection of regexes (you'd have more luck using Text::Balanced, of course) that breaks on 90% of the XML out there is easy. Getting it to work properly is insanely hard. (I've been there. I gave up.) Telling your boss that your parser reads XML, but not XML with newfangled features foo, bar, and baz, is probably not acceptable.

    Good luck.


      They do not have XML::Parser. There not planning on putting it on there at this time, however, they want me to manipulate these incoming XML files. The incoming XML file only have 2 pieces of information in it, and they could just send a normal file, but noooo, they want to use XML so they can say they use XML. Bah. Thanks for your advice everybody, I appreciate it. If I had know ahead of time they weren't going to give me the tools I need to do the job they mandated correctly, I wouldn't have bothered you. so I get to do this instead:
      @ar = `tail -2 "$ack_filename"`; print $ar[0]; $file_size = substr($ar[0],13,-13); print $file_size;
      hope there file format doesn't change. oh, and I can't put it in my space because we all use the same logon and password. yes you read correctly. I've been trying to get them to change that for almost a year, but they have more important things to do. Like work on there golf game. fortuanatly, my year here will be up at the end of july, and I can flee.
        You have my sympathy. Since you are counting (or hoping) on the file format to not change, and not treating the data as XML (as suggested by your code above), you could improve it a little bit.

        Assuming that you just want the number between the FILE_SIZE tags, you can do something like:

        open my $fh, "<$ack_filename" or die "open error: $!"; my $file_size; while (<$fh>) { chomp; if (m|<file_size>([^<]*)</file_size>|i) { $file_size = $1; last; } } $fh->close; print $file_size;
        This avoids running an external command and does not require the value to start at on offset of 13 in the second line from last. Even though it is more flexible, it would not be the right approach to parse XML data, but in your difficult situation I guess you can't do much better.

        Then again, if the people you work with are so stupid and stubborn, maybe they deserve such code or worse.

        Good luck getting out of there.


Re: Re: Re: XML parsing
by PrakashK (Pilgrim) on Mar 19, 2002 at 21:51 UTC
    Just get the tar ball from CPAN yourself, and install it in your own area (along with your programs). Is that not possible?

    Of course, you need to consider the dependencies too (like XML::Parser which XML::Simple depends on), but you get the idea.


Re: Re: Re: XML parsing
by oubiwann (Sexton) on Mar 19, 2002 at 22:26 UTC
    quick helpful addition:

    there are a couple ways to include whatever modules you install in your own space. the one i tend to use for situations like this is:

    use qw(/path/to/your/custom/install);

    use lib qw(/path/to/your/custom/install); use XML::Parser;
    ... etc.



    FoxtrotUniform caught that typo. Thanks, FU ;-)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://152850]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2018-06-19 01:36 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (111 votes). Check out past polls.