Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: change setHandlers XML::Parser

by Jenda (Abbot)
on Oct 19, 2012 at 21:42 UTC ( #1000054=note: print w/ replies, xml ) Need Help??


in reply to change setHandlers XML::Parser

XML::Parser is a little too low-level. What is it you are trying to achieve?

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


Comment on Re: change setHandlers XML::Parser
Re^2: change setHandlers XML::Parser
by etlamar (Novice) on Oct 20, 2012 at 00:27 UTC

    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.

      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>

      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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (7)
As of 2014-10-31 11:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (216 votes), past polls