2013-01-22 138 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' 
           } 
           ] 
        } 
     };