我迄今發現的唯一示例代碼太舊了,不再適用了(使用了不推薦使用的類)。所有我需要的是一些基本的演示:如何使用XML :: LibXML來使用SAX解析XML?
加載和從文件
解析XML定義SAX事件處理程序(一個或多個)
讀的屬性或文本值元素傳遞給事件處理程序
我迄今發現的唯一示例代碼太舊了,不再適用了(使用了不推薦使用的類)。所有我需要的是一些基本的演示:如何使用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};
這很痛苦。
XML :: LibXML :: Sax實現the Perl SAX interface並且有一個很好的文檔。
謝謝。我從未注意過之前的瀏覽鏈接。但是,我確實看到了您引用的警告。你會推薦一個不同的Perl SAX解析器嗎?我不挑剔。它不適用於大文件,但我更喜歡事件驅動的方法解決此問題,因爲我正在讀取Excel輸出的稀疏數據。 – 2009-08-25 19:30:19
XML :: SAX文檔看起來清晰易懂。你得到我的投票。 – 2009-08-25 19:46:04
@Paul謝謝。 – 2009-08-25 19:46:39