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

Re^2: change setHandlers XML::Parser

by etlamar (Novice)
on Oct 20, 2012 at 00:27 UTC ( #1000074=note: print w/ replies, xml ) Need Help??


in reply to Re: change setHandlers XML::Parser
in thread change setHandlers XML::Parser

Thanks, Jenda, and Anonymous Monk, I am trying to parse through a huge kml file that contains longitude and latitude coordinates for census blocks and pull out only those long and lat coords that pertain to certain blocks within a subset of census tracts. I will have CDATA information to parse through to get the tract and block numbers, but right now I am just trying to test code on pulling out the long and lat coordinates that are denoted by a <coordinates> tag in the xml.

In other words, right now, I want to extract information only if the Start handler indicates a <coordinates> tag. That's why I am looking for a way to conditionally switch to a different handler.

Sorry for the long-winded answer.

Hope this helps.

XML::Twig looks interesting, but I was hoping to stick with a more SAX-like parser rather than DOM-like or pull-parser like.

Would you also suggest XML::Twig?

Thanks again.


Comment on Re^2: change setHandlers XML::Parser
Re^3: change setHandlers XML::Parser
by Anonymous Monk on Oct 20, 2012 at 00:52 UTC

    XML::Twig looks interesting, but I was hoping to stick with a more SAX-like parser rather than DOM-like or pull-parser like.

    XML::Twig is super flexible, its SAX+DOM or SAX or DOM.

    Rarely do you want to use the SAX feature alone, mostly its SAX+DOM (SAX+TWIG, only a little piece of DOM).

    Re: XML::Twig n00b

    $ perl use XML::Twig ; XML::Twig->new( twig_handlers => { 'coordinates' => sub { print $_->xpath, "\n"; print $_->trimmed_text, "\n\n"; }, }, )->xparse( "somefile.xml" ); __END__ /on/no/coordinates ro /on/ma/to/peia/coordinates sham /on/coordinates bo /on/coordinates[2] <b>Asin</b> (I) - Biography $ cat somefile.xml <on> <no><coordinates>ro</coordinates></no> <ma><to><peia><coordinates>sham</coordinates></peia></to></ma> <coordinates>bo</coordinates> <coordinates><![CDATA[<b>Asin</b> (I) - Biography]]></coordinates> </on>
Re^3: change setHandlers XML::Parser
by Jenda (Abbot) on Oct 20, 2012 at 09:00 UTC

    You can ask XML::Twig to give you just the tag(s) you are interested in (twig_root) and handle them by a custom subroutine. Or you can have a look at XML::Rules and basically do the same. Or if you were so inclined use XML::LibXML::SAX.

    Jenda
    Enoch was right!
    Enjoy the last years of Rome.

      Thanks very much to you both. I will try XML::Twig. I might come back with additional posts if I get stumped, but it sounds like that module will do the trick.

      Thanks again

      etlamar

        XML::Twig worked like a charm!

        Thanks again very much!

        etlamar

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1000074]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (8)
As of 2014-09-20 11:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (158 votes), past polls