#!/bin/perl -w use strict; use XML::DOM; my $parser = new XML::DOM::Parser; my $doc = $parser->parse( \*DATA ) or die "Unable to parse document"; my $root = $doc->getDocumentElement(); # safer than just getting the first # child, in case the document has a # DTD or start with comments scanner($root); sub scanner { my ($rt) = @_; my $i=0; foreach my $nde ( $rt->getChildNodes()) # yes it is an array! { if ( ($nde->getNodeType() == TEXT_NODE ) && ($nde->getData()=~ /\S/s) ) # to avoid extra white spaces { #$log->info( $i.$nde->getNodeValue()); print $i++," TEXT /", $nde->getData(), "/\n"; } if ($nde->getNodeType == ELEMENT_NODE) { #$log->info( $i.$nde->getNodeName()); print $i++, " ELEMENT ", $nde->getNodeName(), "\n"; } scanner( $nde ); } } __DATA__ Level1 Text Text at Level2a Text at Level2b