Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73

    XML Simple Parse

    ciao a tutti
    ho un piccolo problemino da risolvere

    mi sono spulciato la classe XML::Simple coi relativi metodi

    allora, dopo aver fatto il parser, ho una struttura simile per esempio a questa

    codice:
    {
          'logdir'        => '/var/log/foo/',
          'debugfile'     => '/tmp/foo.debug',
          'server'        => {
              'sahara'        => {
                  'osversion'     => '2.6',
                  'osname'        => 'solaris',
                  'address'       => [ '10.0.0.101', '10.0.1.101' ]
              },
              'sahara'          => {
                  'osversion'     => '6.5',
                  'osname'        => 'irix',
                  'address'       => '10.0.0.102'
              },
              'sahara'      => {
                  'osversion'     => '2.0.34',
                  'osname'        => 'linux',
                  'address'       => [ '10.0.0.103', '10.0.1.103' ]
              }
          }
      }
    il problema è questo

    come faccio ad accedere agli elementi che hanno lo stesso nome "sahara", dal momento che sono sullo stesso livello???

    mi da erorre!!!

    di solito faccio così:
    codice:
    $var1->{server}->{sahara}->{osversion};
    grazie per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    l'ho risolto così

    codice:
    $var1->{server}->[0]->{sahara}->{osversion};
    $var1->{server}->[1]->{sahara}->{osversion};
    $var1->{server}->[2]->{sahara}->{osversion};
    ora nasce però un problema

    se ne ho tante dovrei fare un for

    come faccio a sapere quanti $var1->{server}->{sahara} ho?

    ho provato con:
    codice:
    scalar($var1->{server}->{sahara})
    ma non funziona

    qualche idea??

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    risolto pure questo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    questo è un problema che veramente non risco a risolvere
    codice:
          'logdir'        => '/var/log/foo/',
          'debugfile'     => '/tmp/foo.debug',
          'server'        => {
              'sahara'        => {
                  'osversion'     => '2.6',
                  'osname'        => 'solaris',
                  'address'       => [ '10.0.0.101', '10.0.1.101' ]
              },
              'sahara'          => {
                  'osversion'     => '6.5',
                  'osname'        => 'irix',
                  'address'       => '10.0.0.102'
              },
              'sahara'      => {
                  'osversion'     => '2.0.34',
                  'osname'        => 'linux',
                  'address'       => [ '10.0.0.103', '10.0.1.103' ]
              }
          }
      }
    codice:
    'logdir'        => '/var/log/foo/',
          'debugfile'     => '/tmp/foo.debug',
          'server'        => {
              'sahara'        => {
                  'osversion'     => '2.6',
                  'osname'        => 'solaris',
                  'address'       => [ '10.0.0.101', '10.0.1.101' ]
              }
         }
    }

    il problema è questo

    ci possono essere casi in cui "sahara" è un array oppure solo una variabile
    ho bisogno di sapere coem valutare la cosa

    come posso dire ad un elemento, ossia $var1->{logdir}->{server}->{sahara} , se è un array fai questo, altrimenti fai quest'altro
    codice:
    if ($var1->{logdir}->{server}->{sahara}    ????   ) {
    fai questo
    } else {
    fai quest'altro
    }
    il problema è come far comparare se l'elemnto che ho è un array oppure no

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    vedi se riesci a risolvere con la funzione scalar
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    codice:
    if ($var1->{logdir}->{server}->{sahara}    ????   ) {
    fai questo
    } else {
    fai quest'altro
    }
    ciao,
    io farei una cosa molto semplice,
    cioe' se è definito lo scalare,
    mi creerei un array con il valore dello scalare,
    così ti riconduci sempre alla variabile dell'array.

    cioè:


    codice:
    use strict;
    use warnings;
    my $var='ciao';
    my @var=($var) if (defined $var);
    for (@var) 
      print $_."\n";
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    grazie

    ho risolto in altro modo poi

    mi sono creato una subroutine che verifica se il riferimento passatogli, è un array oppure no

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 © 2025 vBulletin Solutions, Inc. All rights reserved.