如何将XML :: Parser与Style =>'Objects'一起使用
时间:2020-03-05 18:45:07 来源:igfitidea点击:
XML :: Parser :: Style :: Objects的手册页太可怕了。一个简单的hello世界风格的程序确实会有所帮助。
我真的很想做这样的事情:(当然不是真正的代码)
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"; }
解决方案
回答
每当我需要做类似的事情时,通常我最终都会使用XML :: Parser :: EasyTree,它具有更好的文档并且更易于使用。
我强烈推荐它。
回答
在所有情况下,这里都是运行的实际代码...并不重要,但是可以产生输出,希望可以入门...
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
希望能有所帮助。