http://www.perlmonks.org?node_id=1000054


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.

Replies are listed 'Best First'.
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.

      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 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>