0

大量のデータを含む巨大なXMLファイルがあります。XMLを解析して必要なデータのみを抽出するperlスクリプトを作成する必要があります。

私はexpatを使用するように言われました、私は誰かがXMLを解析するためにperlとexpatを使用する方法についての良いチュートリアルや記事を持っているかどうか疑問に思いました。

これがperlにとって本当に新しいimに意味があることを願っています。

4

2 に答える 2

3

XML-TwigXML-Rulesなどのラッパーを介して間接的にexpatを使用するのがおそらく最も簡単でしょう。ただし、 XML-LibXML(expatの代わりにlibxmlを使用)のXML :: LibXML::Readerなどのプルパーサーを使用して解析することもできます。

于 2012-09-18T16:15:34.477 に答える
0

あなたが述べたように、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を直接使用することを検討する必要があります)

于 2014-08-20T11:13:34.127 に答える