Wie verwendet man XML::Parser mit Style => 'Objects'?
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";
}
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