Perl 使用XML::Parser时,它返回什么数据结构?
我试图用perl解析一些XML,但我很难弄清楚如何访问它。我仅限于使用XML::Parser或XML::Twig,因为这必须部署在大量Redhat6系统上,而不添加任何模块,所以我无法使用像XML::Simple这样更方便的工具 问题是如何获取数据。该准则的核心是: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 =&
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]