Pau*_*och 3 xml perl sax xml-libxml
到目前为止,我发现的唯一示例代码已经很久了,它将不再起作用(使用已弃用的类).我所需要的只是一些基本的东西:
从文件加载和解析XML
定义SAX事件处理程序
读取传递给事件处理程序的元素的属性或文本值
发行本身怎么样?
转到XML :: LibXML分发页面,然后单击" 浏览".
请注意文档中的以下注意事项:
目前,XML :: LibXML仅为libxml2的本机SAX实现提供了不完整的接口.当前的实现未在生产环境中进行测试.它可能会导致严重的内存问题或显示错误的行为.
还有XML :: SAX,附带了很好的文档.我曾经使用过几次并且很适合我的目的.
思南的建议很好,但没有连接所有的点.这是一个非常简单的程序,我拼凑在一起:
文件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;
Run Code Online (Sandbox Code Playgroud)
文件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");
Run Code Online (Sandbox Code Playgroud)
注意:如何获取元素属性的值.这没有以我可以使用的方式描述.我用了一个多小时来弄清楚语法.这里是.在我的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};
Run Code Online (Sandbox Code Playgroud)
那很痛苦.