Visualizzazione dei risultati da 1 a 4 su 4

Discussione: XML::Simple

  1. #1

    XML::Simple

    # Questo è il file data.xml:

    <replies>

    <reply number="0">
    <user>Larry</user>
    <text>Hi!</text>
    </reply>

    <reply number="1">
    <user>Niki</user>
    <text>Morning!</text>
    </reply>

    <reply number="2">
    <user>Joe</user>
    <text>Night!</text>
    </reply>

    </replies>

    # per leggere il file data.xml uso questo codice:

    use XML::Simple;

    my $simple = XML::Simple->new( );
    my $tree = $simple->XMLin( './data.xml' );

    print $tree->{ reply }->{ user }[0]; # stampa: Larry...giusto?

    come faccio a stampare tutti i <reply>? credo cmq con un ciclo...ma non so come...

    come faccio ad aggiungere alla struttura i nuovi dati e poi ad aggiornare il file:

    <reply number="3">
    <user>Paul</user>
    <text>How are you?</text>
    </reply>

    lo posso fare con XML::Simple? il file lo aggiorna il modulo o devo farlo io?
    e se avessi voluto modificare i valori di <reply number="2">?

    Grazie...

  2. #2
    la prima cosa da fare è sempre leggere la documentazione, se lo avessi fatto avresti scoperto che tramite questo codice avresti potuto vedere la struttura logica del file.xml

    codice:
    use XML::Simple;
    use Data::Dumper;
    
    my $simple = XML::Simple->new( ); 
    my $tree = $simple->XMLin( './data.xml' );
    
    print Dumper($tree);
    che produce questo output:
    codice:
    $VAR1 = {
              'reply' => [
                           {
                             'user' => 'Larry',
                             'text' => 'Hi!',
                             'number' => '0'
                           },
                           {
                             'user' => 'Niki',
                             'text' => 'Morning!',
                             'number' => '1'
                           },
                           {
                             'user' => 'Joe',
                             'text' => 'Night!',
                             'number' => '2'
                           }
                         ]
            };
    il che ti avrebbe consentito di capire che la struttura del comando che proponi:

    codice:
    print $tree->{ reply }->{ user }[0];
    è logicamente sbagliata.

    la struttura esatta è:

    codice:
    print $tree->{reply}->[<numero>]->{user},"\n";
    per cui per visualizzare tutti gli user basta:
    codice:
    for (my $i=0; $i<=$#{$tree->{'reply'}}; $i++) {
    print "$i: ",$tree->{'reply'}->[$i]->{'user'},"\n";
    }
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    cmq se io avessi messo tanti <reply> invece di <reply numero="x"> il tuo codice andava bene cmq...vero???

    e per aggiungere come faccio? intendo <reply number="x">

    grazie mille! (mi dai poi un tuo parere su questo modulo in generale? è veloce? lo posso usare con file medi/grossi?)

  4. #4
    il parametro "numero" non ha alcun ruolo, riguardati il diagramma generato da Dumper. Gli indici dell'array sono dati dalla posizione nello stesso e NON da quel parametro, per cui se ti serve solo a quello lo puoi anche eliminare.

    Non ho fatto dei benchmark su quel modulo ma ritengo che sia buono visto che è molto usato.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.