Leggere XML

  • Creatore Discussione Creatore Discussione pixart
  • Data di inizio Data di inizio

pixart

Nuovo Utente
1 Mar 2011
7
0
0
Buon pomeriggio a tutti,
vi illustro il mio problema.

Ho un file XML che leggo attraverso Simplexml_load_file, riesco a navigare allinterno dell'Array e a stampare a video i campi che mi interessano.

Ora io vorrei far visualizzare a video solamente le companie aeree che si trovano all'interno dell' XML nella parte AirLineNameList->AirLineName, ma solamente una volta non volgio vederli tutti.

Sicuramente non sono stato chiaro.....
Vi allego il file XML che ho.
Grazie in anticipo

PHP:
<FlightSearch>
    <Offer>
      <Flight>
         <AirLineNameList>
             <AirLineName>Alitalia</AirLineName>
         </AirLineNameList>
       </Flight>
    </Offer>
    <Offer>
      <Flight>
         <AirLineNameList>
             <AirLineName>Alitalia</AirLineName>
         </AirLineNameList>
       </Flight>
    </Offer>
    <Offer>
      <Flight>
         <AirLineNameList>
             <AirLineName>Alitalia</AirLineName>
         </AirLineNameList>
       </Flight>
    </Offer>
    <Offer>
      <Flight>
         <AirLineNameList>
             <AirLineName>easyJet</AirLineName>
         </AirLineNameList>
       </Flight>
    </Offer>
<Offer>
      <Flight>
         <AirLineNameList>
             <AirLineName>Meridiana</AirLineName>
         </AirLineNameList>
       </Flight>
    </Offer>
<Offer>
      <Flight>
         <AirLineNameList>
             <AirLineName>Blue Panorama</AirLineName>
         </AirLineNameList>
       </Flight>
    </Offer>
</FlightSearch>

Con questo codice

PHP:
 <?php
$ListOffers = simplexml_load_file("voli_italia.xml");
foreach ($ListOffers->Offer as $volo)
    {
    echo "<br>" . $volo->Flight->AirLineNameList->AirLineName;
    }
?>

vedo tutta la lista anche i doppioni....

Alitalia
easyJet
easyJet
Blue Panorama
easyJet
 
Per prima cosa, se non ce l'ha già metti la clausola <?xml version='1.0'?> all'inizio del file, se il file XML è well formed il parser del PHP lo legge meglio, poi... il problema:
Se trasformi tutto in un array, il tuo problem lo risolvi con $array = array_unique($array_orig) dove $array è un subset di $array_orig ma senza i duplicati.
Altro metodo più facile da risolvere: usare un database, se puoi usarne uno ti risolve di questi problemi, anche se poi te ne creerà altri :D
 
Ho provato ma non mi funziona...
mi da questo errore:
Warning: array_unique() expects parameter 1 to be array, object given in C:\xampp\htdocs\PHP-Test\index.php on line 31

L'array che intendo io è quello di simplexml_load_file... tu intendevi un array puro ?
Grazie.
 
Ovviamente, un array è un array, simpleXML non torna array di valori.
Puoi fare così:
PHP:
foreach ($ListOffers->Offer as $volo)
    {
    $voli[] = $volo->Flight->AirLineNameList->AirLineName;
    }
E poi fare array_unique() su $voli e quindi ciclarlo, non è elegante ma funziona, l'alternativa elegante è usare le funzioni per leggere XML, ma francamente non me ne vengono in mente. è troppo tempo che non lo uso; sicuramente mi studierei xpath però.
 

Discussioni simili