스타일 => '객체'와 함께 XML::Parser를 어떻게 사용합니까?

StackOverflow https://stackoverflow.com/questions/34914

  •  09-06-2019
  •  | 
  •  

문제

매뉴얼 페이지 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 더 나은 문서가 있고 사용이 더 간단합니다.

나는 그것을 강력히 추천합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top