xml e php. Problema con i nodi

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
Buonasera.

Dato questo file xml:

<prenotazioni>
<prenotazione>
<datainizio>2015-03-24</datainizio>
<datafine>2015-03-29</datafine>
<prenotazioneid>82179054</prenotazioneid>

<persone>
<persona>
<nome>Mario Rossi</nome>
<mail>[email protected]</mail>
<telefono>N/A</CustomerPhone>
</persona>

</persone>
<camere>
<camera>
<idcamera>82179054</idcamera>
<datainizio>2015-03-24</datainizio>
<datafine>2015-03-29</datafine>
<cameratipo>
<idtipo>53475</idtipo>
<descrizione>lorem ipsum</descrizione>
</cameratipo>
<nomepersona>Mario Rossi</nomepersona>
</camera>

</camere>

</prenotazione>
<prenotazione>
<datainizio>2015-03-24</datainizio>
<datafine>2015-03-29</datafine>
<prenotazioneid>82179054</prenotazioneid>

<persone>
<persona>
<nome>Mario Rossi</nome>
<mail>[email protected]</mail>
<telefono>N/A</CustomerPhone>
</persona>

</persone>
<camere>
<camera>
<idcamera>82179054</idcamera>
<datainizio>2015-03-24</datainizio>
<datafine>2015-03-29</datafine>
<cameratipo>
<idtipo>53475</idtipo>
<descrizione>lorem ipsum</descrizione>
</cameratipo>
<nomepersona>Mario rossi</nomepersona>
</camera>

</camere>

</prenotazione>
</prenotazioni>

Devo recuperare i valori e inserirli in una query...

Mi date qualche consiglio?

grazie a tutti
 

marino51

Utente Attivo
28 Feb 2013
2.918
164
63
Lombardia
due cose,
inserisci all'inizio
PHP:
<?xml version="1.0" encoding="utf-8"?>
la seconda, è presente un errore
PHP:
 <telefono>N/A</CustomerPhone>
o è telefono o è CustomerPhone, correggi ed il browser ti visualizza il file xml
se ti serve poi come leggerlo, provo a sviluppare uno script
ciao
Marino
 

marino51

Utente Attivo
28 Feb 2013
2.918
164
63
Lombardia
questo è lo script per leggere il tuo xml,
PHP:
<?php 

$xml = simplexml_load_file('prenotazioni.xml'); 

$nr_prenotazione = count($xml->prenotazione);
echo "<h3>nodi prenotazione nel file prenotazioni.xml (".$nr_prenotazione.")</h3>"; 

$i=0;
while ($i < $nr_prenotazione)
{
  echo "<hr> </hr>";
  $prenotazione = $xml->prenotazione[$i];

  echo "ID prenotazione: <b>" .$prenotazione->prenotazioneid ."</b><br />"; 
  echo "data inizio    : <b>" .$prenotazione->datainizio     ."</b><br />"; 
  echo "data fine      : <b>" .$prenotazione->datafine       ."</b><br />"; 

  $nr_persona = count($prenotazione->persone->persona);
  echo "<h4>nodi persona (".$nr_persona.")</h4>"; 

  $j=0;
  while ($j < $nr_persona)
  {
    $persona = $prenotazione->persone->persona[$j];

    echo "nome           : <b>" .$persona->nome."</b><br />"; 
    echo "mail           : <b>" .$persona->mail."</b><br />"; 
    echo "telefono       : <b>" .$persona->telefono."</b><br />"; 
    $j++; 
  }

  $nr_camera = count($prenotazione->camere->camera);
  echo "<h4>nodi camera (".$nr_camera.")</h4>"; 

  $j=0;
  while ($j < $nr_camera)
  {
    $camera = $prenotazione->camere->camera[$j];
    $cameratipo = $prenotazione->camere->camera->cameratipo[$j];

    echo "idcamera    : <b>" .$camera->idcamera       ."</b><br />";
    echo "data inizio : <b>" .$camera->datainizio     ."</b><br />";
    echo "data fine   : <b>" .$camera->datafine       ."</b><br />"; 
    echo "idtipo      : <b>" .$cameratipo->idtipo     ."</b><br />"; 
    echo "descrizione : <b>" .$cameratipo->descrizione."</b><br />"; 
    $j++; 
  }
  echo "<br />"; 
  $i++; 
}
?>
per essere sicuro, ho aggiunto qualche elemento al tuo xml originale e questo è il risultato della lettura
Cattura.PNG
ciao
Marino
 

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
Ciao!!!
Grazie per la risposta..
Dopo lo provo. Una cosa: se all'interno di camera avessi una cosa del genere:

<camera>
<idcamera>82179054</idcamera>
<datainizio>2015-03-24</datainizio>
<datafine>2015-03-29</datafine>
<prezzogiorno>
<prezzo data="22/03/2015">60</prezzo>
<prezzo data="23/03/2015">60</prezzo>
<prezzo data="24/03/2015">80</prezzo>
</prezzogiorno>
<cameratipo>
<idtipo>53475</idtipo>
<descrizione>lorem ipsum</descrizione>
</cameratipo>
<nomepersona>Mario rossi</nomepersona>
</camera>

Come faccio a recuperarlo?
Considera che il tag prezzo è già presente ma a me basterebbe recuperare attributo e prezzo...

Grazie mille
 

marino51

Utente Attivo
28 Feb 2013
2.918
164
63
Lombardia
ti posto lo script modificato, è più pulito avendo sostituito i cicli while con foreach
ho inserito anche le righe con parametro
ciao
Marino
PHP:
<?php 

$xml = simplexml_load_file('prenotazioni.xml') or die("Errore: Non riesco a creare l'oggetto");; 

echo "<h3>nodi prenotazione nel file prenotazioni.xml (".count($xml->prenotazione).")</h3>"; 

foreach($xml->prenotazione as $prenotazione)
{
  echo "<hr> </hr>";

  echo "ID prenotazione: <b>" .$prenotazione->prenotazioneid ."</b><br />"; 
  echo "data inizio    : <b>" .$prenotazione->datainizio     ."</b><br />"; 
  echo "data fine      : <b>" .$prenotazione->datafine       ."</b><br />"; 

  echo "<h4>nodi persona (".count($prenotazione->persone->persona).")</h4>"; 

  foreach($prenotazione->persone->persona as $persona)
  {
    echo "nome           : <b>" .$persona->nome."</b><br />"; 
    echo "mail           : <b>" .$persona->mail."</b><br />"; 
    echo "telefono       : <b>" .$persona->telefono."</b><br />"; 
  }

  echo "<h4>nodi camera (".count($prenotazione->camere->camera).")</h4>"; 

  foreach($prenotazione->camere->camera as $camera)
  {
    $cameratipo = $camera->cameratipo;

    echo "idcamera    : <b>" .$camera->idcamera       ."</b><br />";
    echo "data inizio : <b>" .$camera->datainizio     ."</b><br />";
    echo "data fine   : <b>" .$camera->datafine       ."</b><br />"; 
    echo "idtipo      : <b>" .$cameratipo->idtipo     ."</b><br />"; 
    echo "descrizione : <b>" .$cameratipo->descrizione."</b><br />"; 

    foreach($camera->prezzogiorno->prezzo as $prezzo)
    {
      echo "<b>" . $prezzo['data'] . " - " . $prezzo . "</b><br>";
    }
  }
  echo "<br />"; 
}
?>
Cattura2.PNG