2016-11-15 1 views
0

Ich versuche, eine XML-Datei zu analysieren. Ich laden Sie die Daten von hier http://mips.helmholtz-muenchen.de/proj/ppi/Wie kann ich eine XML-Datei analysieren

und ich verwende diesen Code, aber ich bekomme Fehler

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\$p2\n"; 
} 

ich auf einen Ordner im Desktop, um die Datei setzen (mac) Dann öffne ich Terminal und ich rufe das Programm wie perl myfile.pl

Dies ist der Fehler, den ich

kann nicht gefunden XML/Simple.pm in @INC (@INC enthält bekommen:/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/Benutzer/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.) bei myfile.pl Zeile 3. BEGIN fehlgeschlagen- -Compilation bei myfile.pl Linie abgebrochen 3.

Nach Zweig Installation, jetzt bekomme ich diesen Fehler

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. 
+0

Was ist der Fehler? – Toto

+0

Sie müssen 'XML :: Simple' von CPAN installieren – Toto

+2

Oder besser, nicht [' XML :: Simple wird abgeraten] (http://stackoverflow.com/questions/33267765/why-is-xmlsimple-discouraged) und stattdessen "XML :: Twig" oder "XML :: LibXML" verwenden. – Sobrique

Antwort

1

XML :: Simple kein Bestandteil der Standard-Perl-Installation ist. Wenn Sie es verwenden möchten, müssen Sie es installieren. This answer gibt einen guten Überblick darüber, wie man das macht.

Sie sollten jedoch die documentation for XML::Simple, lesen die sagt:

Die Verwendung dieses Moduls in neuen Code abgeraten. Andere Module sind verfügbar, die einfachere und konsistentere Schnittstellen bereitstellen. Insbesondere ist XML::LibXML sehr zu empfehlen und ist eine ausgezeichnete Alternative.

Ich empfehle dringend, dass Sie Ihre Verwendung von XML :: Simple zugunsten eines der anderen oben genannten Module aufgeben.

Aktualisierung: Sie haben XML :: Twig jetzt installiert und Ihre Frage aktualisiert, um die Fehlermeldungen hinzuzufügen, die Sie erhalten.

Verwendung von nicht initialisierten Wert $ MIPS_file in String an myfile.pl Linie 7.

Kann Objekt-Methode "XMLin" über Paket "XML :: Twig" auf myfile.pl Linie 7.

lokalisieren

Linie 7 scheint dies zu sein:

my $data = $xml->XMLin("$MIPS_file"); 

Die Variable $MIPS_file gegeben Wert ein paar Zeilen weiter oben in dieser Zeile:

my $MIPS_file = $ARGV[0]; 

Im Array @ARGV können Sie auf alle Befehlszeilenargumente zugreifen, die an Ihr Programm übergeben werden. Die Tatsache, dass $MIPS_fileundef enthält, bedeutet, dass keine Argumente an Ihr Programm übergeben werden.Sie müssen es wie folgt ausführen:

myfile.pl name_of_your_xml_file.xml 

Der zweite Fehler ist interessanter.

Kann Objekt-Methode "XMLin" über Paket "XML :: Twig" auf myfile.pl Linie 7.

Sie haben von der Verwendung von XML :: Simple zur Verwendung von XML umge finden :: Zweig. Dazu haben Sie nur die Zeile use in Ihrem Programm geändert. Sie haben den tatsächlichen Code nicht geändert. XML :: Simple und XML :: Twig sind völlig unterschiedliche Bibliotheken. Sie funktionieren überhaupt nicht auf die gleiche Weise. XML :: Twig hat keine XMLIn() Methode. Sie müssen die Dokumentation für XML :: Twig lesen und Ihren Code ändern, um die verschiedenen Funktionen dieses Moduls zu verwenden.

+1

Sobald ein sinnvoller Parser in Verwendung ist, ist Stack Overflow ein guter Ort, um ein Beispiel dafür zu finden, wie man es leicht macht. – Sobrique

+0

@Dave Cross, nachdem ich Zweig installiert habe, bekomme ich wieder Fehler und deshalb habe ich Ihre Antwort nicht akzeptiert. Ich überarbeitete meine Frage über –

+0

@LearnerAlgorithm: Siehe das Update zu meiner Antwort. –

1

Ohne genau zu wissen, welche URL Sie herunterladen, kann ich Ihnen keine feste Antwort geben.

jedoch eine sehr grobe XML :: Twig Beispiel, dass Macht tun, was Sie suchen ist:

#!/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'); 
} 

Hinweis - das ist ein bisschen eine Vermutung auf XML basiert :: Simple Code, anstatt auf die Quell-XML zu verweisen (weil ich nicht weiß, welche XML-Quelle Sie verwenden). Dies ist ein Teil des Problems mit XML::Simple - es kann nicht vollständig XML darstellen (zumindest nicht sehr einfach)

Verwandte Themen