大量のデータを含む巨大なXMLファイルがあります。XMLを解析して必要なデータのみを抽出するperlスクリプトを作成する必要があります。
私はexpatを使用するように言われました、私は誰かがXMLを解析するためにperlとexpatを使用する方法についての良いチュートリアルや記事を持っているかどうか疑問に思いました。
これがperlにとって本当に新しいimに意味があることを願っています。
大量のデータを含む巨大なXMLファイルがあります。XMLを解析して必要なデータのみを抽出するperlスクリプトを作成する必要があります。
私はexpatを使用するように言われました、私は誰かがXMLを解析するためにperlとexpatを使用する方法についての良いチュートリアルや記事を持っているかどうか疑問に思いました。
これがperlにとって本当に新しいimに意味があることを願っています。
XML-TwigやXML-Rulesなどのラッパーを介して間接的にexpatを使用するのがおそらく最も簡単でしょう。ただし、 XML-LibXML(expatの代わりにlibxmlを使用)のXML :: LibXML::Readerなどのプルパーサーを使用して解析することもできます。
あなたが述べたように、XMLファイルが巨大で、選択されたデータのみが必要な場合は、XML :: Reader:RSがその役割を果たします。XML:: Parserを基礎となる解析モジュールとして使用し、次にexpatを使用して解析します。 XML。
次のコードスニペットは、潜在的に巨大なXMLファイルから必要な情報のみを解析します。少量のメモリのみを使用します。
use strict;
use warnings;
use XML::Reader::RS;
my $rdr = XML::Reader::RS->new(\*DATA, { mode => 'branches' },
{ root => '/info/line[@cat="A"]', branch => [ '/' ] });
while ($rdr->iterate) {
my ($line) = $rdr->value;
for ($line) {
$_ = '' unless defined $_;
}
print "line = '$line'\n";
}
__DATA__
<info>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="A">Data 0000001</line>
<line cat="A">Data 0000002</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
<line cat="xyz">abc</line>
</info>
(ただし、XML :: Reader :: RSは最速ではありません。速度とメモリ効率が必要な場合は、XML :: Parserを直接使用することを検討する必要があります)