2009-08-25 50 views
3

我迄今發現的唯一示例代碼太舊了,不再適用了(使用了不推薦使用的類)。所有我需要的是一些基本的演示:如何使用XML :: LibXML來使用SAX解析XML?

  1. 加載和從文件

  2. 解析XML定義SAX事件處理程序(一個或多個)

  3. 讀的屬性或文本值元素傳遞給事件處理程序

回答

7

How about the distribution itself

轉至XML::LibXML distribution page並點擊browse

注意在documentation下列注意事項:

目前XML ::的libxml只提供了一個不完整的接口的libxml2的本機SAX實現。目前的實施並未在生產環境中進行測試。它可能會導致重大的內存問題或顯示錯誤的行爲。

還有XML::SAX其中nice documentation自帶。我用了幾次,爲我的目的運作良好。

+0

謝謝。我從未注意過之前的瀏覽鏈接。但是,我確實看到了您引用的警告。你會推薦一個不同的Perl SAX解析器嗎?我不挑剔。它不適用於大文件,但我更喜歡事件驅動的方法解決此問題,因爲我正在讀取Excel輸出的稀疏數據。 – 2009-08-25 19:30:19

+0

XML :: SAX文檔看起來清晰易懂。你得到我的投票。 – 2009-08-25 19:46:04

+0

@Paul謝謝。 – 2009-08-25 19:46:39

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」。因此,爲了得到愚蠢的索引屬性,我需要這個:

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

這很痛苦。