私はXMLファイルを解析しようとしています。私はここからデータをダウンロードする http://mips.helmholtz-muenchen.de/proj/ppi/
私はこのコードを使用しますが、エラーが発生します
use strict;
use warnings;
use XML::Twig;
my $MIPS_file = $ARGV[0];
my $xml = XML::Twig->new();
my $data = $xml->XMLin("$MIPS_file");
my $intList = $data->{"entry"}->{"interactionList"}->{"interaction"};
foreach my $int (@{$intList}) {
my $experiment_type = $int->{"experimentList"}->{"experimentDescription"}->{"interactionDetection"}->{"names"}->{"shortLabel"};
my $partList = $int->{"participantList"}->{"proteinParticipant"};
my ($p1,$p2);
foreach my $protPart(@{$partList}) {
if ($protPart->{"proteinInteractor"}->{"organism"}->{"ncbiTaxId"} eq "9606") { # select human proteins
if (!$p1) {
$p1 = $protPart->{"proteinInteractor"}->{"xref"}->{"primaryRef"}->{"id"};
}
else {
$p2 = $protPart->{"proteinInteractor"}->{"xref"}->{"primaryRef"}->{"id"};
}
}
}
print "$p1$p2n";
}
私はデスクトップのフォルダにファイルを置く(マック)その後、私は端末を開き、私は perl myfile.pl
これは私が得るエラーです
XML / Simpleを見つけることはできません。pmの@INC(@INCには、/Users/admin/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/darwin-2level / Users / admin / perl5 / perlbrew / perls / perl- 5.16.0 / lib / site_perl / 5.16.0 /Users/admin/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0/darwin-2level / Users / admin / perl5 / perlbrew / perls / perl- 5.16.0 / lib / 5.16.0。)at myfile.pl 3。 BEGINは失敗しました - myfile.pl行でコンパイルが中止されました3。
枝をインストールした後、今私はこのエラーが表示されます
Use of uninitialized value $MIPS_file in string at myfile.pl line 7.
Can"t locate object method "XMLin" via package "XML::Twig" at myfile.pl line 7.
回答:
回答№1は1XML :: Simpleは標準のPerlインストールの一部ではありません。それを使用したい場合は、それをインストールする必要があります。 この回答 それをどうやって行うのかをよく理解しています。
しかし、あなたは XML :: Simpleのドキュメントそれは言う:
このモジュールを新しいコードで使用することはお勧めしません。より直接的かつ一貫性のあるインターフェースを提供する他のモジュールも利用可能である。特に、 XML :: LibXML 強くお勧めします。 XML :: Twig 優れた選択肢です。
上記の他のモジュールの1つを優先してXML :: Simpleの使用を中止することを強くお勧めします。
更新: あなたはXML :: Twigをインストールしました。あなたが得ているエラーメッセージを追加するための質問を更新しました。
myfile.pl行のstringに初期化されていない値$ MIPS_fileを使用する。
myfile.pl 7行目のXML :: Twigパッケージを使用してオブジェクトメソッド "XMLin"を見つけることはできません。
7行目は次のようになります。
my $data = $xml->XMLin("$MIPS_file");
変数 $MIPS_file
この行には数行前の値が与えられます:
my $MIPS_file = $ARGV[0];
ザ @ARGV
配列は、プログラムに渡されるコマンドライン引数にアクセスできる場所です。事実 $MIPS_file
含まれる undef
あなたのプログラムに引数を渡していないことを強く示唆しています。あなたはこれを次のように実行する必要があります:
myfile.pl name_of_your_xml_file.xml
2番目のエラーはより面白いです。
myfile.pl 7行目のXML :: Twigパッケージを使用してオブジェクトメソッド "XMLin"を見つけることはできません。
あなたはXML :: SimpleをXML :: Twigを使って使うことに切り替えました。しかし、これを行うには、 use
あなたのプログラムの行。 XML :: SimpleとXML :: Twigは完全に異なるライブラリであり、全く同じように動作しません。 XML :: Twigは持っていない XMLIn()
方法。 XML :: Twigのドキュメントを読んで、このモジュールが提供するさまざまな機能を使用するようにコードを変更する必要があります。
回答№2の場合は1
あなたがダウンロードしているURLを正確に知らなければ、私はあなたに確かな答えを与えることはできません。
しかし、非常におおまかなXML :: Twigの例 かもしれない あなたが探しているものは:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my $MIPS_file = $ARGV[0];
my $xml = XML::Twig->new();
$xml -> parsefile ( $MIPS_file );
#assuming ncbTaxId is an attribute - I don"t know, this is part of the problem with XML::Simple
foreach my $element ( $xml -> get_xpath ( "//proteinInteractor/organism[@ncbiTaxId="9606"]/.." ) ) {
$element -> print; #debugging;
#assuming "id" is an attrbute of "primaryRef" subelement.
print $element -> get_xpath(".//primaryRef",0) -> att("id");
}
注 - これはソースXMLを参照するのではなく、XML :: Simpleコードに基づいて推測されます(使用しているXMLソースがわからないため)。これは次の問題の一部です XML::Simple
- XMLを完全に表現することはできません(少なくとも、あまり簡単ではありません)