使用XML时不会抛出数组引用消息:简单

时间:2014-02-13 19:47:22

标签: perl

我是perl并且尝试使用XML解析XML:Simple

我的xml是

<suite suiteId="45" instanceId="3485">
   <project>Test project</project>
   <testcase id="2346" name="abc" suite="TEst1" priority="1" severity="1" owner="domain" category="BAT" timeout="10">
    <description>Checking Test1</description>
    <testExecTimeInMins>2</testExecTimeInMins>
    <status>Failed</status>
    <testServer id="86" name="host1" ip="1.2.3.4" platform="Linux" database="MySQL" buildNo="" />
    <error></error>
  </testcase>
  <testcase id="2346456" name="abc123" suite="TEst2" priority="1" severity="1" owner="domain" category="BAT" timeout="10">
    <description>Checking Test2</description>
    <testExecTimeInMins>6</testExecTimeInMins>
    <status>Passed</status>
    <testServer id="86" name="host1" ip="1.2.3.4" platform="Linux" database="MySQL" buildNo="" />
    <error />
  </testcase>
 </suite>

如何获取testcase id,name,suite的值? 如何获取testServer,id,name的值?

我尝试访问它,如下所示,但它会抛出“Not a Array reference at”

$XMLData = XMLin($targetFile);


foreach my $testcases (@{$XMLData->{testcase}}){
    $logger->info("$testcases->{id}");
}

1 个答案:

答案 0 :(得分:1)

如果检查来自XMLin的实际数据,您会看到没有数组引用(就像错误消息状态一样),而是有一个键入的hashref测试用例的名称:

use strict;
use warnings; 

use Data::Dumper; 
use XML::Simple; 

my $xml = XMLin("/Users/mcmillhj/temp.xml");

print Dumper $xml;

__DATA__
{
          'instanceId' => '3485',
          'project' => 'Test project',
          'testcase' => {
                        'abc123' => {
                                    'owner' => 'domain',
                                    'priority' => '1',
                                    'status' => 'Passed',
                                    'suite' => 'TEst2',
                                    'testExecTimeInMins' => '6',
                                    'description' => 'Checking Test2',
                                    'timeout' => '10',
                                    'error' => {},
                                    'category' => 'BAT',
                                    'id' => '2346456',
                                    'severity' => '1',
                                    'testServer' => {
                                                    'database' => 'MySQL',
                                                    'buildNo' => '',
                                                    'ip' => '1.2.3.4',
                                                    'name' => 'host1',
                                                    'platform' => 'Linux',
                                                    'id' => '86'
                                                  }
                                  },
                        'abc' => {
                                 'owner' => 'domain',
                                 'priority' => '1',
                                 'status' => 'Failed',
                                 'suite' => 'TEst1',
                                 'testExecTimeInMins' => '2',
                                 'description' => 'Checking Test1',
                                 'timeout' => '10',
                                 'error' => {},
                                 'category' => 'BAT',
                                 'id' => '2346',
                                 'severity' => '1',
                                 'testServer' => {
                                                 'database' => 'MySQL',
                                                 'buildNo' => '',
                                                 'ip' => '1.2.3.4',
                                                 'name' => 'host1',
                                                 'platform' => 'Linux',
                                                 'id' => '86'
                                               }
                               }
                      },
          'suiteId' => '45'
        };

要获取所有测试用例,您只需要遍历键:

foreach my $testcasename ( keys %{ $XMLData->{testcase} } ){
    $logger->info($XMLdata->{testcase}->{$testcasename}->{id});
}