到目前为止,我找到的唯一示例代码都已过时无法使用(使用了已弃用的类)。我只需要一个简单的东西来演示:
从文件中加载和解析XML
定义SAX事件处理程序
读取传递给事件处理程序的元素的属性或文本值
到目前为止,我找到的唯一示例代码都已过时无法使用(使用了已弃用的类)。我只需要一个简单的东西来演示:
从文件中加载和解析XML
定义SAX事件处理程序
读取传递给事件处理程序的元素的属性或文本值
Sinan的建议很好,但它没有连接所有的点。这里是一个我拼凑出来的非常简单的程序:
文件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。命名空间定义为xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"。因此,为了获取这个奇怪的Index属性,我需要使用以下代码:
my $ssIndex = $el->{Attributes}{'{urn:schemas-microsoft-com:office:spreadsheet}Index'}{Value};
那真是令人痛苦。