我有简单的XML,我想在Perl中读取并生成包含所有读取键的哈希.
考虑以下代码:
my $content = $xml->XMLin("filesmap.xml")->{Item}; my %files = map { $_->{Path} => 1 } @$content;
当XML文件包含许多Item
标记时,此代码段非常有用.然后$content
是对数组的引用.但是当只有一个时,Item
我在解除引用为数组时会出错.我的假设是$content
对标量的引用,而不是数组.
确保从XML读取数组值的做法是什么?
你需要的是不使用XML::Simple
,然后它真的是微不足道的.我最喜欢的相当简单的XML示例是XML::Twig
use XML::Twig; my $twig = XML::Twig -> new -> parsefile ( 'filesmap.xml' ); my @files = map { $_ -> trimmed_text } $twig -> get_xpath ( '//Path' );
通过更详细的XML示例(以及期望的结果),我将能够为您提供更好的答案.
部分问题XML::Simple
是它试图将XML数据结构转换为perl数据结构,并且 - 因为哈希是键值和无序但数组是有序的,它必须猜测.有时它做错了,有时则不一致.
如果您希望它保持一致,您可以设置:
my $xml = XMLin( "filesmap.xml", ForceArray => 1, KeyAttr => [], ForceContent => 1 );
但实际上 - XML::Simple
只是一条痛苦的途径.不要使用它.如果您不喜欢XML::Twig
,请尝试XML::LibXML
改为.