如何使用XML :: LibXML来使用SAX解析XML?
问题描述:
我迄今发现的唯一示例代码太旧了,不再适用了(使用了不推荐使用的类)。所有我需要的是一些基本的演示:如何使用XML :: LibXML来使用SAX解析XML?
加载和从文件
解析XML定义SAX事件处理程序(一个或多个)
读的属性或文本值元素传递给事件处理程序
答
How about the distribution itself?
转至XML::LibXML distribution page并点击browse。
注意在documentation下列注意事项:
目前XML ::的libxml只提供了一个不完整的接口的libxml2的本机SAX实现。目前的实施并未在生产环境中进行测试。它可能会导致重大的内存问题或显示错误的行为。
还有XML::SAX其中nice documentation自带。我用了几次,为我的目的运作良好。
答
思南的建议很好,但它没有连接所有的点。下面是一个非常简单的程序,我拼凑:
文件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”。因此,为了得到愚蠢的索引属性,我需要这个:
my $ssIndex = $el->{Attributes}{'{urn:schemas-microsoft-com:office:spreadsheet}Index'}{Value};
这很痛苦。
谢谢。我从未注意过之前的浏览链接。但是,我确实看到了您引用的警告。你会推荐一个不同的Perl SAX解析器吗?我不挑剔。它不适用于大文件,但我更喜欢事件驱动的方法解决此问题,因为我正在读取Excel输出的稀疏数据。 – 2009-08-25 19:30:19
XML :: SAX文档看起来清晰易懂。你得到我的投票。 – 2009-08-25 19:46:04
@Paul谢谢。 – 2009-08-25 19:46:39