如何使用 XML::Parser 和 Style => 'Objects'
题
的手册页 XML::Parser::Style::Objects
太可怕了。一个简单的 hello world 风格的程序确实会很有帮助。
我真的很想做这样的事情:(当然不是真正的代码)
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) {
$_->doSomething();
}
与 foo.xml
<foo> <inner>some text</inner> <inner>something else</inner></foo>
哪个输出
>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
希望有帮助。
其他提示
当我需要做类似的事情时,通常我最终会使用 XML::解析器::EasyTree 它有更好的文档并且更易于使用。
我强烈推荐它。
不隶属于 StackOverflow