Frage

Die Handbuchseite für XML::Parser::Style::Objects ist schrecklich.Ein einfaches Programm im Hallo-Welt-Stil wäre wirklich hilfreich.

Ich wollte unbedingt so etwas machen:(natürlich kein echter Code)

use XML::Parser;
my $p = XML::Parser->new(Style => 'Objects', Pkg => 'MyNode');
my $tree = $p->parsefile('foo.xml');
$tree->doSomething();

MyNode::doSomething() {
  my $self = shift;
  print "This is a normal node";
  for $kid ($self->Kids)
  {
    $kid->doSomething();
  }
}

MyNode::special::doSomething() {
  my $self = shift;
  print "This is a special node";
}
War es hilfreich?

Lösung

In allen Fällen handelt es sich hier um tatsächlichen Code, der ausgeführt wird ...bedeutet nicht viel, erzeugt aber eine Ausgabe und kann Ihnen hoffentlich den Einstieg erleichtern ...

use XML::Parser;

package MyNode::inner;
    sub doSomething {
      my $self = shift;
      print "This is an inner node containing : ";
      print $self->{Kids}->[0]->{Text};
      print "\n";
    }
package MyNode::Characters;
    sub doSomething {}
package MyNode::foo;
    sub doSomething {
      my $self = shift;
      print "This is an external node\n";
      for $kid (@ { $self->{Kids} }) {
        $kid->doSomething();
      }
    }

package main;

my $p = XML::Parser->new(Style => 'Objects', Pkg => 'MyNode');
my $tree = $p->parsefile('foo.xml');
for (@$tree) {
    $_->doSomething();
}

mit foo.xml

 <foo> <inner>some text</inner> <inner>something else</inner></foo>

welche ausgibt

>perl -w "tree.pl"     
This is an external node
This is an inner node containing : some text
This is an inner node containing : something else

Hoffentlich hilft das.

Andere Tipps

Wann immer ich etwas Ähnliches tun muss, verwende ich normalerweise XML::Parser::EasyTree Es verfügt über eine bessere Dokumentation und ist einfacher zu verwenden.

Ich empfehle es sehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top