in reply to Preferred Methods (again)
So your requirements are that you want to parse XML (possibly produced in-house) and that you want it to be fast,especially as you are only interested by the root tag of the document.
Would these be satisfied by using a full-fledged XML parser, but by only parsing until the first open tag?
If yes then a pull parser is what you are looking for. Just pull the XML (including potentially a DTD, silly comments and tons of PIs) until you find the tag... and then stop! XML::Parser has a pull mode, but I found that XML::TokeParser is actually much easier to use in this case:
#!/bin/perl -w use strict; use XML::TokeParser; #parse from open handle my $p=XML::TokeParser->new(\*DATA,Noempty=>1); #skip to <Root...> my $tag= $p->get_tag('Root'); my $atts= $tag->[1]; # that's where the atts are, look at the docs while( my( $att, $value)= each %$atts) { print "$att -> $value\n"; } __DATA__ <?xml version="1.0"?> <!DOCTYPE Root SYSTEM "/path-to/theDtd"> <Root Id="456990" Group="Navy" TimeStamp="20020116123446" Performance= +"Regular" Database="gyt98x" Project="x"> <Request> <DataForce>Premium</DataForce> </Request> </Root>
2 side notes:
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Preferred Methods (again)
by vek (Prior) on Jan 17, 2002 at 03:41 UTC |