3

到目前为止,我发现的唯一示例代码太旧了,它不再起作用(使用不推荐使用的类)。我只需要一些基本的东西来证明:

  1. 从文件加载和解析 XML

  2. 定义 SAX 事件处理程序

  3. 读取传递给事件处理程序的元素的属性或文本值

4

3 回答 3

7

发行本身怎么样?

转到XML::LibXML 分发页面并单击浏览

请注意文档中的以下注意事项:

目前 XML::LibXML 只为 libxml2 的本机 SAX 实现提供了一个不完整的接口。当前实现未在生产环境中测试。它可能会导致严重的内存问题或显示错误的行为。

还有XML::SAX带有很好的文档。我用了几次,效果很好。

于 2009-08-25T19:17:51.263 回答
6

思南的建议很好,但并没有把所有的点都联系起来。这是我拼凑起来的一个非常简单的程序:

文件 1:处理程序 (MySAXHandler.pm)

  package MySAXHandler;
  use base qw(XML::SAX::Base);

  sub start_document {
    my ($self, $doc) = @_;
    # process document start event
  }

  sub start_element {
    my ($self, $el) = @_;
    # process element start event
    print "Element: " . $el->{LocalName} . "\n";
  }

1;

文件2:测试程序(test.pl)

#!/usr/bin/perl

use strict;
use XML::SAX;
use MySAXHandler;

my $parser = XML::SAX::ParserFactory->parser(
        Handler => MySAXHandler->new
);

$parser->parse_uri("some-xml-file.xml");

注意:如何获取元素属性的值。这不是以我可以使用的方式描述的。我花了一个多小时才弄清楚语法。这里是。在我的 XML 文件中,属性是 ss:Index。ss 的命名空间定义是 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"。因此,为了获得愚蠢的 Index 属性,我需要这个:

my $ssIndex = $el->{Attributes}{'{urn:schemas-microsoft-com:office:spreadsheet}Index'}{Value};

那很痛苦。

于 2009-08-25T20:41:12.873 回答
0

XML::LibXML::Sax 实现了 Perl SAX 接口,并且有一个不错的文档。

于 2013-11-18T10:54:01.280 回答