如何将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

希望能有所帮助。