Philipp Hasenfratz: (PERL) XML::DOM Anwendungsproblem

Beitrag lesen

Hallihallo

Ich versuche mich grad etwas mit XML; dass ich noch nicht gleich zum "alten Eisen" gehöre.
Begonnen hat alles mit dem guten (und einfachen) XML::Simple... Alles super, aber mir scheint es zu einfach zu sein ;)
Auch Validator gibt's nicht etc...
Also versuche ich mich mal an DOM und SAX anzufreunden (DOM geht vor).

Also jetzt XML::DOM, da tauchen immer die selben Probleme auf und irgendwie weiss ich nicht warum (Frage unten) :

---XML-file---
<?xml version = "1.0"?>
<!DOCTYPE ADDRBOOK SYSTEM "addr_book.dtd">
<ADDRBOOK>
    <ENTRY ID="pa">
        <NAME>Pieter Aaron</NAME>
        <ADDRESS>404 Error Way</ADDRESS>
        <PHONENUM DESC="Work">404-555-1234</PHONENUM>
        <PHONENUM DESC="Fax">404-555-4321</PHONENUM>
        <EMAIL>pieter.aaron@inter.net</EMAIL>
    </ENTRY>
    <ENTRY ID="en">
        <NAME>Emeka Ndubuisi</NAME>
        <ADDRESS>42 Spam Blvd</ADDRESS>
        <PHONENUM DESC="Work">767-555-7676</PHONENUM>
        <EMAIL>endubuisi@spamtron.com</EMAIL>
    </ENTRY>
</ADDRBOOK>
---/XML-file---

---perl-Program---
use strict;
use Data::Dumper;
use XML::DOM;

my $parser = new XML::DOM::Parser;
my $doc    = $parser->parsefile('address.xml');

my $nodes  = $doc->getElementsByTagName('ENTRY');
my $n    = $nodes->getLength;

print "Länge : $n\n";

for (my $i=0; $i<$n; $i++)
{
   my $a_node = $nodes->item($i);
   my $a_chld = a_node->getChildNodes;
   for (my $j=0; $j<$a_chld->getLength; $j++)
   {
 my $a_child = $a_chld->item($j);
 if ($a_child->getNodeName() eq 'NAME')
 {
    print 'Name: ' . $a_child->getFirstChild->getData . "\n";
 }
 if ($a_child->getNodeName() eq 'PHONENUM')
 {
    if ($a_child->getAttribute('DESC') eq 'Work')
    {
  print 'Work Phone: ' .
                $a_child>getFirstChild->getData . "\n";
    }
 }
   }
}
---/perl-Program---

Also das Problem:
Ich bekomme des öfteren die Fehlermeldung, dass eine gewisse Methode (getChildNodes z. B.) nicht im Objekt $a_node "ist". print Dumper sagt was, also ist das Objekt definiert und in der Doku steht's auch geschrieben, dass dies funktioniert. Also warum tut es das denn nicht?

Viele Grüsse

Philipp