【问题标题】:How do I pass arguments to an XML::SAX parser?如何将参数传递给 XML::SAX 解析器?
【发布时间】:2011-10-24 21:10:10
【问题描述】:

我有一个基于 XML::SAX::Base 的解析器,看起来像这样:

package MyParser;
use base qw(XML::SAX::Base);
our @ISA = ('XML::SAX::Base');

sub new {
    my $class = shift;
    my %params = @_;

    my $self = {
        thing   => $params{thing},
    };
    bless $self, $class;

    return $self;
}

sub start_element {
    my ($self, $data) = @_;
    # Do something useful using $data & $self->{thing}
}
1;

我将它与 XML::SAX::ParserFactory 一起使用:

#!/usr/bin/env perl
use MyParser;

my $parser = XML::SAX::ParserFactory->parser(
                Handler => MyParser->new
            );
$parser->parse_string('<document/>');

有没有一种方法可以将参数传递给 MyParser 的 new() 子例程?

【问题讨论】:

  • 你打算如何处理传递的参数?
  • 我正在解析的 XML 文档实际上来自 Ganglia 的 gmetad,我将它通过套接字推送到另一个监控系统(Graphite),所以我希望能够通过套接字。

标签: xml perl sax


【解决方案1】:

您的 new 方法已设置为使用 %params 接收参数,因此只需将您的参数作为哈希传递:

my $parser = XML::SAX::ParserFactory->parser(
            Handler => MyParser->new(param1=>$value1, param2=>$value2, ...)
        );

然后在您的 new 方法中,您可以像访问任何其他哈希一样访问参数:

$param1 = $params{param1};
$param2 = $params{param2};
...

【讨论】:

  • 哈,我发誓我试过了,但认为它没有用......很容易。
猜你喜欢
  • 2021-01-07
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2019-03-01
  • 2021-11-12
  • 2018-12-20
  • 2017-02-05
  • 2012-08-27
相关资源
最近更新 更多