2009-08-25 16 views
3

私が今までに見つけた唯一のコード例は、それほど古いものではなくなりました(廃止されたクラスを使用します)。SAXを使用してXMLを解析するには、XML :: LibXMLを使用するにはどうすればよいですか?

  1. ロードとの属性またはテキスト値を読み込みSAXイベントハンドラ(S)

  2. の定義ファイル

  3. からXMLをパース:私は必要なのは実証し、基本的なものですイベントハンドラに渡される要素

答えて

7

How about the distribution itself

XML::LibXML distribution pageにアクセスし、browseをクリックします。

documentationに以下の注意:モーメントXMLで

::のlibxmlはlibxml2ののネイティブSAXの実装にのみ、不完全なインタフェースを提供します。現在の実装は、実稼働環境ではテストされていません。重大なメモリの問題を引き起こすか、または間違った動作を示すことがあります。

には、nice documentationが付属しています。私はそれを数回使用し、私の目的のためにうまくいった。

+0

ありがとうございました。私は前にブラウズリンクに気付かなかった。しかし、私はあなたが引用した警告を見ました。別のPerl SAXパーサーをお勧めしますか?私は気難しくない。それは大きなファイルではありませんが、私はExcelによる疎なデータ出力を読み込んでいるため、この問題のイベントドリブンアプローチを好んでいます。 –

+0

XML :: SAXのドキュメントは分かりやすいように見えます。あなたは私の投票を得る。 –

+0

@Paulありがとうございます。 –

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"); 

ここで私は一緒に石畳非常に単純なプログラムです注:要素属性の値を取得する方法。これは私が使用できる方法では説明されていませんでした。構文を理解するのに1時間以上かかりました。ここにあります。私のXMLファイルでは、属性はss:Indexでした。 ssの名前空間の定義は、xmlns:ss = "urn:schemas-microsoft-com:office:spreadsheet"でした。したがって、愚かなインデックス属性を取得するには、私はこれが必要でした:

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

それは痛いです。

関連する問題