2010-10-06 6 views
1

Je dois simuler un tableau comme s'il était retourné depuis la fonction Net :: DBI fetchall_arrayref.Perl simulant Net :: DBI fetchall_arrayref()

permet de dire que la requête SQL est quelque chose comme "SELECT data1, données2, data3 de table1"

J'ai un fichier XML en tant que

<type1> 
    <data1>a</data1> 
    <data2>b</data2> 
    <data3>c</data3> 
</type1> 
<type1> 
    <data1>da</data1> 
    <data2>db</data2> 
    <data3>dc</data3> 
</type1> 

J'ai lu ce fichier XML en utilisant XML: : simple pour obtenir un tableau complet de données comme:

$VAR1 = { 
      'type1' => [ 
        { 
         'data2' => 'b', 
         'data3' => 'c', 
         'data1' => 'a' 
        }, 
        { 
         'data2' => 'db', 
         'data3' => 'dc', 
         'data1' => 'da' 
        } 
        ] 
     }; 

Comment puis-je obtenir ce tableau à une forme qui sera identique à celui retourné par chercher all_array_ref?

que je fais quelque chose comme ceci:

#REad from testin.xml file 
$data = $xml->XMLin('testin.xml'); 

@testdata = $data->{type1}; 

$i = 0; 
foreach $e (@{$data->{type1}}) 
{ 
     $simulate_data[$i++] = \$e; 
} 

S'il vous plaît aider.

Répondre

2

fetchall_arrayref() renvoie une référence à un tableau contenant une référence par ligne. Vous souhaitez transformer chaque ensemble de valeurs de la référence de hachage en une référence de tableau. Cela devrait fonctionner:

my $arr_ref; 
foreach my $hashref (@{$data->{'type1'}}) { 
    push @$arr_ref, [ sort values %$hashref ]; 
} 

Cela me donne les éléments suivants (via Data :: Dumper):

$VAR1 = [ 
      [ 
      'a', 
      'b', 
      'c' 
      ], 
      [ 
      'da', 
      'db', 
      'dc' 
      ] 
     ]; 

(En plus:. S'il vous plaît toujours mettre use strict; dans vos programmes)

Questions connexes