2013-01-22 86 views
-1

我想解析一个简单的XML文档以进行哈希。在XML中将XML解析为XML :: Parser

<?xml version ="1.0"?> 
<catalog> 
    <book id = "bk101"> 
     <author>Bob</author> 
     <title>Batman</title> 
    </book> 
    <book id = "bk102"> 
     <author>Jerry</author> 
     <title>Superman</title> 
    </book> 
</catalog> 

预期的输出如下所示。

$VAR1 = { 
    'catalog'=>{ 
      'bk101'=>[ 
        'author'=>'Bob', 
        'title'=>'Batman' 
        ] 
      'bk102'=>[ 
        'author'=>'Jerry', 
        'title'=>'Superman' 
        ] 
     } 
    } 

我已经与XML::Simple和其他库的帮助下完成这一点,但我有XML::Parser做到这一点,而无需使用递归的。

我该如何在Perl中执行此操作?

+2

第一步是在https://metacpan.org/module/XML阅读文档: :解析器并遵循它。然后向我们展示您的代码,并告诉我们您究竟遇到了什么问题或者您不了解的内容。 – Perleone

+0

为什么限制? – runrig

回答

2

XML::Hash::LX::xml2hash()接近你要找的东西:

#!/usr/bin/env perl 
use strict; 
use warnings qw(all); 

use Data::Dumper; 
use XML::Hash::LX; 

my $hash = xml2hash q(<?xml version ="1.0"?> 
    <catalog> 
     <book id = "bk101"> 
      <author>Bob</author> 
      <title>Batman</title> 
     </book> 
     <book id = "bk102"> 
      <author>Jerry</author> 
      <title>Superman</title> 
     </book> 
    </catalog> 
); 
print Dumper $hash; 

打印:

$VAR1 = { 
      'catalog' => { 
         'book' => [ 
           { 
            'title' => 'Batman', 
            'author' => 'Bob', 
            '-id' => 'bk101' 
           }, 
           { 
            'title' => 'Superman', 
            'author' => 'Jerry', 
            '-id' => 'bk102' 
           } 
           ] 
        } 
     };