Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Perl 使用XML::Parser时,它返回什么数据结构?_Perl_Xml Parsing - Fatal编程技术网

Perl 使用XML::Parser时,它返回什么数据结构?

Perl 使用XML::Parser时,它返回什么数据结构?,perl,xml-parsing,Perl,Xml Parsing,我试图用perl解析一些XML,但我很难弄清楚如何访问它。我仅限于使用XML::Parser或XML::Twig,因为这必须部署在大量Redhat6系统上,而不添加任何模块,所以我无法使用像XML::Simple这样更方便的工具 问题是如何获取数据。该准则的核心是: use XML::Parser; use Data::Dumper; # $response_string is a string of XML. my $xml_parser = new XML::Parser(Style =&

我试图用perl解析一些XML,但我很难弄清楚如何访问它。我仅限于使用XML::Parser或XML::Twig,因为这必须部署在大量Redhat6系统上,而不添加任何模块,所以我无法使用像XML::Simple这样更方便的工具

问题是如何获取数据。该准则的核心是:

use XML::Parser;
use Data::Dumper;

# $response_string is a string of XML.
my $xml_parser = new XML::Parser(Style => 'Time');
my $xml_wodge = $xml_parser->parse($response_string);

# Export methods to see what this is.
print Dumper ($xml_wodge);
print "I have a ref type: ", ref($xml_wodge), "\n";
print "I have array size: ", @xml_wodge, "\n";
print "I have hash keys:  ", %xml_wodge, "\n";
print "I have string value: ", $xml_wodge, "\n";
这会产生一些奇数输出

$VAR1 = [
   [valid XML dump]
];
I have reference type ARRAY
I have array size: 
I have hash keys:
I have string value ARRAY(0x22c5538)
$xml_wodge中的值很重要。转储程序正确地转储了它,但我使用的数据结构原语似乎都没有返回任何内容。它检测为数组,但它似乎是一个零元素数组,其中隐藏着一个完整的XML数据结构


如何实现它?

您使用的XML::Parse是错误的。阅读

具体来说,->parse方法并不打算返回任何内容。这意味着用数据填充XML::Parse对象。然后你就可以使用这个对象了

那么,你会做:

my $xml_parser = new XML::Parser(Style => 'Time');
$xml_parser->parse($response_string);

# .. Then use $xml_parser
在注释中是正确的,此调用将返回数组引用。根据perlreftut,访问阵列需要:

${$xml_wodge}[0]
样式语法

解析器返回特定格式的数据结构。对于这样的XML结构:

<Top>
  <Mid1 id="thing">
    <Leaf1>"I'm a leaf"</Leaf1>
  </Mid1>
</Top>

它似乎是一个数组引用。看。总是严格使用;使用警告$xml_-wodge和@xml_-wodge是不同的变量。其本身不鼓励使用,因此我反对将其分类为方便。在这两个选项中,我建议使用,尽管这取决于版本号。您花费所有时间说您不能安装模块,但您的代码依赖于CPAN上甚至不存在的XML::Parser::Style::time。XML::Parser和XML::Twig都不是Perl中包含的核心模块。如果您是从OS软件包存储库获取它们,那么我建议您从同一个位置获取XML::LibXML,并且我遇到了协调问题,这并不意味着返回任何带有“树”样式文档的内容,比如,Parse将返回文档的解析树。我确实得到了一个对对象的引用,并且它确实有某种数据结构,其中包含我的XML。@sysadmin1138:它很可能像许多对象类一样返回对象本身。但是如果您查看文档页面顶部的示例,显然不需要返回值,解析文档也没有说明返回值。注意:${$xml_-wodge}[1]也可以写成:$xml_-wodge->[1],得到的$xml_-wodge->[1]->[2]->[2]可以进一步简化为:$xml_-wodge->[1][2][2]虽然我不会。
${${${$xml_wodge}[1]}[2]}[2]}[2]