Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解析xml文件_Xml_Perl - Fatal编程技术网

如何解析xml文件

如何解析xml文件,xml,perl,Xml,Perl,我正在尝试解析一个XML文件。我从这里下载数据 我使用这个代码,但我得到了错误 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'}->{'inter

我正在尝试解析一个XML文件。我从这里下载数据

我使用这个代码,但我得到了错误

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";
}
我把文件放在桌面(mac)的一个文件夹中,然后打开终端,像
perl myfile.pl

这就是我得到的错误

在@INC中找不到XML/Simple.pm(@INC包含:/Users/admin/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/darwin-2level/Users/admin/perl5/perlbrew/perls/5.16.0/lib/site_perl/5.16.0/Users/admin/perl5.16.0/perl5.0/lib/5.16.0)在myfile.pl第3行。 BEGIN失败--编译在myfile.pl第3行中止

在安装twig之后,现在我得到了这个错误

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.

Simple不是标准Perl安装的一部分。如果你想使用它,那么你需要安装它。提供了一个很好的概述如何做到这一点

但是,您应该阅读以下内容:

不鼓励在新代码中使用此模块。还提供了其他模块,它们提供了更直观和一致的接口。特别是,强烈建议使用,这是一个很好的选择

我强烈建议您放弃使用XML::Simple,转而使用上面提到的其他模块之一

更新:您现在已经安装了XML::Twig,并更新了您的问题以添加您收到的错误消息

在myfile.pl第7行的字符串中使用未初始化值$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
第二个错误更有趣

无法通过myfile.pl第7行的包“XML::Twig”找到对象方法“XMLin”


您已经从使用XML::Simple切换到使用XML::Twig。但要做到这一点,您只需更改程序中的
use
行。您没有更改任何实际代码。Simple和Twig是完全不同的库。它们的工作方式完全不同。Twig没有
XMLIn()
方法。您需要阅读XML::Twig的文档,并更改代码以使用此模块提供的各种功能。

XML::Simple不是标准Perl安装的一部分。如果你想使用它,那么你需要安装它。提供了一个很好的概述如何做到这一点

但是,您应该阅读以下内容:

不鼓励在新代码中使用此模块。还提供了其他模块,它们提供了更直观和一致的接口。特别是,强烈建议使用,这是一个很好的选择

我强烈建议您放弃使用XML::Simple,转而使用上面提到的其他模块之一

更新:您现在已经安装了XML::Twig,并更新了您的问题以添加您收到的错误消息

在myfile.pl第7行的字符串中使用未初始化值$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
第二个错误更有趣

无法通过myfile.pl第7行的包“XML::Twig”找到对象方法“XMLin”


您已经从使用XML::Simple切换到使用XML::Twig。但要做到这一点,您只需更改程序中的
use
行。您没有更改任何实际代码。Simple和Twig是完全不同的库。它们的工作方式完全不同。Twig没有
XMLIn()
方法。您需要阅读XML::Twig的文档,并更改代码以使用此模块提供的各种功能。

如果不知道您正在下载哪个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::Simple代码的猜测,而不是引用源XML(因为我不知道您使用的是哪个XML源)。这是
XML::Simple
问题的一部分-它不能完全表示XML(至少,不是很容易)

如果不确切知道您正在下载哪个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::Simple代码的猜测,而不是引用源XML(因为我不知道您使用的是哪个XML源)。这是
XML::Simple
问题的一部分-它不能完全表示XML(至少,不是很容易)

错误是什么?您必须从CPA安装
XML::Simple
,或者更好,不要使用
XML::Twig
XML::LibXML
。您是在Windows还是Unix上?你使用的具体文件是什么?(URL)。
cpan安装XML::Twig
或查看软件包管理器中的。这可能是相关的:错误是什么?您必须从CPANOr更好地安装
XML::Simple
,不要使用
XML::Twig
XML::LibXML
。您使用的是Windows还是Uni