2

Perl スクリプトを使用して、XML ファイル内の特定の名前を持つノードの子ノード データ値を取得する必要があります。XML::LibXML::Simpleを使用しています。

コード スニペットを以下に示します。

my $booklist = XMLin(path);

  foreach my $book (@{$booklist->{detail}}) {
    print $book->{name} . "\n";
}

XML ファイルは次のようになります。

<?xml version='1.0' encoding='iso-8859-1'?>
<booklist>
<book>
<detail label='label1' status='active' type='none'>
<name>book1</name>
</detail >
<detail label='label2' status='active' type='none'>
<name>book2</name>
</detail >
</book>
</booklist>

上記のコードを使用すると、次のエラー メッセージが表示されました:「ARRAY 参照ではありません」

誰でも私を助けてもらえますか?

4

5 に答える 5

2

OPで使用されたXML::Simpleのソリューションの下。

use strict;
use warnings;
use XML::Simple;

my $booklist = XMLin($ARGV[0], KeyAttr => [], ForceArray => qr/detail/);

foreach my $book (@{$booklist->{book}->{detail}}) {
    print $book->{name} . "\n";
}

ここで重要な部分は、「詳細」サブノードを配列として表現することを強制する、XMLin に指定されたオプションです。

XML::Simple の良いクイック スタートは、CPAN のドキュメントです: http://metacpan.org/pod/XML::Simple

于 2013-06-27T07:54:56.323 に答える