Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668

    estrarre dati da xml senza ripetizioni

    Ciao a tutti,

    houn grosso problema che non so come risolvere, spero che qualche d' uno possa aitarmi..

    come faccio ad estrarre dati da un file xml senza ripetizioni..

    file xml:

    <nome>Giorgio</nome>
    <eta>22</eta>
    <nome>Giorgio</nome>
    <eta>22</eta>
    <nome>Mario</nome>
    <eta>22</eta>
    <nome>Lucia</nome>
    <eta>22</eta>

    Quello che vorrei ottenere è questo:

    Giorgio
    Mario
    Lucia


    possibile?

    Ringrazio in anticipo per l' aiuto

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    preg_match_all("/<nome>(.*)<\/nome>/",$file,$mth);
    $nomi = array_unique($mth[1]);
    echo '<pre>';
    print_r($nomi);
    echo '</pre>';

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668
    grazie mille ma come lo uso?..Le mie conoscenza di php sono molto limitate..Basta questo per leggere l' XML..

    Purtroppo mi ci sono trovato dentro e non riesco ad uscirne..


  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668
    Pardon, il codice che uso è questo:

    <?PHP
    $quanti = 5;
    $indice = 256;
    $contatore = 0;

    $apri_xml = fopen("database.xml", 'r');

    while(!feof($apri_xml))
    {
    $buffer = ltrim(Chop(fgets($apri_xml, $indice)));
    if (($buffer == "<utente>") && ($contatore < $quanti))
    {
    $nome = ltrim(Chop(fgets($apri_xml, $indice)));
    $cognome = ltrim(Chop(fgets($apri_xml, $indice)));

    $nome = ereg_replace( "<nome>", "", $nome );
    $nome = ereg_replace( "</nome>", "", $nome );
    $nome = ereg_replace( "\"", "\\\"", $nome );

    $cognome = ereg_replace( "<cognome>", "", $cognome );
    $cognome = ereg_replace( "</cognome>", "", $cognome );

    echo($nome . " " . $cognome . "
    ");

    $contatore++;
    }
    }

    fclose($apri_xml);
    ?>

    grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668
    se ci fosse qualcosa di piu semplice ... è ben gradita...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    $file = file_get_contents('database.xml'); // qui dai il percorso del file
    preg_match_all("/<nome>(.*)<\/nome>/",$file,$mth);
    $nomi = array_unique($mth[1]);
    echo '<pre>';
    print_r($nomi);
    echo '</pre>';

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668
    ora lo provo..mille grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668
    Funziona a meraviglia..grazie mille..

    Un ultimissima cosa, ho aggiunto qualcosina al tuo codice...

    <?php
    $file = file_get_contents('prova.xml'); // qui dai il percorso del file

    //Elenco i nodi da prendere
    preg_match_all("/<nome>(.*)<\/nome>/",$file,$mth);
    preg_match_all("/<cognome>(.*)<\/cognome>/",$file,$mthf);

    //Inserisco il risultato in un array
    $nomi = array_unique($mth[1]);
    $cognome = array_unique($mthf[1]);

    //Stampo il risultato
    echo '<pre>';
    for ($i=0; $i<10; $i++) {
    print_r($nomi[$i] . "
    " . $cognome[$i]);
    }
    echo '</pre>';
    ?>



    come posso fare per distinguere un attributo da un' altro?
    Mi spiego meglio:

    ho due tag cosi composti:
    <url id='1'>bla</url>
    <url id='2'>ble</url>

    come faccio per stampare solo il tag url con id=1?
    <Curiosità: Perchè print_r? e non print?



    Ti ringrazio

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    http://se2.php.net/manual/it/function.print-r.php

    print_r lo usi in fase di debug, è utile per avere subito un formato leggibile della tua variabile. Una volta che usi un for, un foreach eccetera per ciclare un array allora usi echo o print.

    Per il resto non saprei, ad esempio tu volevi i nominativi unici ma se ad esempio ci fossero due Giorgio ma con età diverse, allora sarebbero due record distinti e l'array_unique così non andrebbe più bene.

    Anche l'espressione regolare come la stai impostando tu credo sia sbagliata, bisognerebbe conoscere la struttura completa di ogni nodo per farlo tutto in un'unica preg e non usandone una per ogni attributo.
    In questo caso però la cosa si complica e non so se sono in grado di aiutarti.
    Spero di non aver detto sciocchezze.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    668
    va benone ci proverò...grazie

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.