spoddie has asked for the wisdom of the Perl Monks concerning the following question:
Hi Guys,
Problem in a nutshell: I cannot retrieve Text node data.
I am very new to Perl but need to use it for a project I am involved with. I need to write an XML parser that uses DOM that plugs into the back of apache.
(In practice it will be more complex, but that is enough for now..) An exerept from my apache module code is.... (The xml arrives in $buf having been poked in over a socket) and it is all called from the handler() routine.My environment is: Solaris 2.6 Perl 5.6.0 Apache 1.3.12 Mod-perl 1.24 XML::Parser 2.27 XML::DOM 1.25 An example of the XML I am parsing is: <methodCall>Level1 Text <Level2a>Text at Level2a</Level2a> <Level2b>Text at Level2b</Level2b> </methodCall>
Although the output is ugly, I believe I should be able to retrieve the Elements <tags> and the text (data). What I actually get is:my $parser = new XML::DOM::Parser; $doc = $parser->parse( $buf ) or die "Unable to parse document"; $root = $doc->getFirstChild(); scanner($root); sub scanner { my ($rt) = @_; my $i; my $nde; my $ndeLst = $rt->getChildNodes(); my $numndes = $ndeLst->getLength() - 1; for ( $i = 0; $i < $numndes; $i++ ) { $nde = $ndeLst->item( $i ); if ($nde->getNodeType() == TEXT_NODE ) { $log->info( $i.$nde->getNodeValue()); print $i,"TEXT", $nde->getData(); } if ($nde->getNodeType == ELEMENT_NODE) { $log->info( $i.$nde->getNodeName()); print $i, "ELEMENT ", $nde->getNodeName(), "\n"; } scanner( $nde ); } }
The text elements seem to be lots of white space. I don't think you have to worry about casting in perl so I don't understand why I cannot retrieve the textual data. I do get the first level though. Incidently calling a $root->toString() prints everything so I know it is getting into the tree ok. I would greatly appreciate any advice from you perl gurus out there as I have spent many hours on this without any results !0TEXTLevel1 Text 1ELEMENT Level2a 2TEXT 3ELEMENT Level2b
Back to
Seekers of Perl Wisdom