Как вы используете XML :: Parser с Style = > 'Объекты'
Вопрос
Страница руководства по XML :: Parser :: Style :: Objects
ужасна. Простая привет программа в мировом стиле будет очень полезна.
Я действительно хотел сделать что-то вроде этого: (конечно, не настоящий код)
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";
}
Решение
Во всех случаях здесь приведен фактический код, который выполняется ... не так много значит, но выдает результат и, надеюсь, поможет вам начать ...
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) {
Во всех случаях здесь приведен фактический код, который выполняется ... не так много значит, но выдает результат и, надеюсь, поможет вам начать ...
<foo> <inner>some text</inner> <inner>something else</inner></foo>
с foo.xml
>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
который выводит
<*>
Надеюсь, это поможет.
->doSomething();
}
с foo.xml
<*>который выводит
<*>Надеюсь, это поможет.
Другие советы
Когда мне нужно сделать что-то подобное, обычно я использую XML :: Parser :: EasyTree имеет лучшую документацию и проще в использовании.
Я очень рекомендую это.