首页 > 解决方案 > 在 Perl 中使用 XML::Simple 将哈希转换为 XML 后内容丢失

问题描述

代码:

my $test = {
    'a' => {
        'disabled' => 'false',
        'options' => '%build_options',
        'mailStatus' => {}, 
        'dependencies' =>{                                                                
            'test' => {                                                                                                              
                    'platforms' => {},                                                                                                 
                    'name' => 'nightly-regressions',                                                                                    
                    'preRequisitePlatforms' => {},                                                                                                             
                    'dependType' => 'pass'
                    },
        },                                                               
        'Above' => 'false',
        'options' => {},
        'critical' => 'true',
    }
};
print XMLout($test, noattr=>1, KeepRoot=>1, RootName=>undef, NoEscape => 1);

当我运行上面的代码将哈希转换为 xml 时,缺少一级“测试”,我得到的输出 xml 是:

输出:

<a>
  <Above>false</Above>
  <critical>true</critical>
  <dependencies>
    <name>nightly-regressions</name>
    <dependType>pass</dependType>
    <platforms></platforms>
    <preRequisitePlatforms></preRequisitePlatforms>
  </dependencies>
  <disabled>false</disabled>
  <mailStatus></mailStatus>
  <options></options>
</a>

谁能帮我找出我的代码有什么问题?

标签: xmlperlhash

解决方案


尝试使用 strict 选项导入 XML::Simple:

use XML::Simple qw(:strict);

您会发现您缺少 KeyAttr 选项的值:

print XMLout($test, noattr=>1, KeepRoot=>1, RootName=>undef, NoEscape=>1, KeyAttr=>[]);

推荐阅读