2014-02-13 16 views
1

我新的Perl和嘗試使用解析XML XML:簡單不使用XML時,數組引用消息被拋出:簡單

我的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> 

我如何獲得的值測試用例ID,名稱,套件? 如何獲取testServer,id,name的值?

我試圖訪問它,如下圖所示,但「在不是數組引用」

$XMLData = XMLin($targetFile); 


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

回答

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}); 
}