【问题标题】:How do I use XML::LibXML to parse XML using SAX?如何使用 XML::LibXML 通过 SAX 解析 XML?
【发布时间】:2010-11-22 18:08:30
【问题描述】:

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

  1. 从文件中加载和解析 XML

  2. 定义 SAX 事件处理程序

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

【问题讨论】:

    标签: xml perl sax xml-libxml


    【解决方案1】:

    How about the distribution itself?

    转到XML::LibXML distribution page 并点击browse

    请注意documentation 中的以下注意事项:

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

    还有XML::SAX 附带nice documentation。我用了几次,效果很好。

    【讨论】:

    • 谢谢。我以前从未注意到浏览链接。但是,我确实看到了您引用的警告。你会推荐一个不同的 Perl SAX 解析器吗?我不挑剔。它不适用于大文件,但我更喜欢事件驱动的方法来解决这个问题,因为我正在读取 Excel 输出的稀疏数据。
    • XML::SAX 文档看起来很容易理解。你得到我的投票。
    【解决方案2】:

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

    文件 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};
    

    那是痛苦的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 2011-06-17
        相关资源
        最近更新 更多