Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
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 drinking their drinks and smoking their pipes about the Monastery: (6)
As of 2015-07-07 07:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls