我试图解析我创建的一个简单的XML文件...它看起来像这样:
<project name="AU" date="2/2/2011" location="proj1">
<GenomeList name="Processed">
<genome name="AU4" />
</GenomeList>
<GenomeList name="Unprocessed">
<genome name="AU1" />
<genome name="AU2" />
<genome name="AU3" />
</GenomeList>
</project>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是解析基因组列表:似乎当列表中只有一个元素时,它以不同的方式添加条目,如下所示:
'Unprocessed' => {
'genome' => {
'AU2' => {},
'AU3' => {},
'AU1' => {}
}
},
'Processed' => {
'genome' => {
'name' => 'AU4'
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让它以一致的方式解析吗?
我尝试使用valueAttr但它似乎没有工作
谢谢
这是使用XML :: Simple的一个非常常见的问题,所以我猜这是你正在使用的.ForceArray可能会做你想要的.请参阅下面的示例和输出; 第三个印刷语句应该做你想要的.请注意,一旦您的使用扩展到琐碎和可预测的输入/输出内容之外,XML :: Simple绝对不简单.如果您想使用它,请不要在"简单"一词上停止阅读其文档.
XML :: LibXML或XML :: Twig也值得学习.
use warnings;
use strict;
use XML::Simple;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
my $multi = <<"";
<project name="AU" date="2/2/2011" location="proj1">
<GenomeList name="Processed">
<genome name="AU4" />
</GenomeList>
<GenomeList name="Unprocessed">
<genome name="AU1" />
<genome name="AU2" />
<genome name="AU3" />
</GenomeList>
</project>
my $single = <<"";
<project name="AU" date="2/2/2011" location="proj1">
<GenomeList name="Processed">
<genome name="AU4" />
</GenomeList>
<GenomeList name="Unprocessed">
<genome name="AU1" />
</GenomeList>
</project>
print Dumper( XMLin($multi) );
print Dumper( XMLin($single) );
print Dumper( XMLin( $single, ForceArray => 1 ) );
Run Code Online (Sandbox Code Playgroud)