Lettura file XML

  • Creatore Discussione Creatore Discussione mrz8589
  • Data di inizio Data di inizio

mrz8589

Nuovo Utente
1 Ott 2009
6
0
1
Ciao a tutti

Dovrei leggere (con PHP4) un file XML con la struttura allegata per ottenere in output:
nome , cognome , indirizzo
nome , cognome , indirizzo



<?xml version="1.0"?>
<database>
<utente>
<nome>Luca</nome>
<cognome>Ruggiero</cognome>
<indirizzo><![CDATA[Via dell'utente1]]></indirizzo>
</utente>
<utente>
<nome>Max</nome>
<cognome>Bosco</cognome>
<indirizzo><![CDATA[Via dell'utente2]]></indirizzo>
</utente>
</database>
 
Ho dato un'occhiata all'indirizzo che mi hai consigliato, ho provato a far girare sul mio server il codice di lettura

PHP:
<?php
  $objDOM = new DOMDocument();
  $objDOM->load("area4.mdb.xml");

  $rec = $objDOM->getElementsByTagName("RECORD");

  foreach ($rec as $value) {
      $ids = $value->getElementsByTagName("A083");
      if ($ids->item(0) != NULL) {
          $id = $ids->item(0)->nodeValue;
          echo "A083: $id <br/>";
      }
  }
?>

ma mi da errore sulla riga:
$id = $ids->item(0)->nodeValue;

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /web/htdocs/www....../letturaxml.php on line 10

invece, con quest'altro codice leggo tutto tranne il campo con CDATA
<indirizzo><![CDATA[Via dell'utente1]]></indirizzo>

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

$apri_xml = fopen("database1.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)));
$indirizzo = ltrim(Chop(fgets($apri_xml, $indice)));

echo($nome . " " . $cognome . " " . $indirizzo . "<br>");

$contatore++;
}
}

fclose($apri_xml);
?>

ottengo:

Luca Ruggiero
Max Bosco

manca il campo indirizzo.
Come posso fare a leggere anche il campo con CDATA
 
Ho dato un'occhiata all'indirizzo che mi hai consigliato, ho provato a far girare sul mio server il codice di lettura

PHP:
<?php
  $objDOM = new DOMDocument();
  $objDOM->load("area4.mdb.xml");

  $rec = $objDOM->getElementsByTagName("RECORD");

  foreach ($rec as $value) {
      $ids = $value->getElementsByTagName("A083");
      if ($ids->item(0) != NULL) {
          $id = $ids->item(0)->nodeValue;
          echo "A083: $id <br/>";
      }
  }
?>

ma mi da errore sulla riga:
$id = $ids->item(0)->nodeValue;

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /web/htdocs/www....../letturaxml.php on line 10

...

Scusa, ma hai fatto girare esattamente il codice che hai postato? Senza modificare il documento da caricare ed i tagname?

PHP:
<?php
  $objDOM = new DOMDocument();
  $objDOM->load("database1.xml");

  $rec = $objDOM->getElementsByTagName("utente");

  foreach ($rec as $value) {
		$nome = "";
		$cognome = "";
		$indirizzo = "";

	  $ele_nome = $value->getElementsByTagName("nome");
	  if ($ele_nome->item(0) != NULL) {
	  	$nome  = $ele_nome->item(0)->nodeValue;
	  }
	  $ele_cognome = $value->getElementsByTagName("cognome");
	  if ($ele_cognome->item(0) != NULL) {
	  	$cognome  = $ele_cognome->item(0)->nodeValue;
	  }
	  $ele_indirizzo = $value->getElementsByTagName("indirizzo");
	  if ($ele_indirizzo->item(0) != NULL) {
	  	$indirizzo  = $ele_indirizzo->item(0)->nodeValue;
	  }

		echo $nome." ".$cognome." - ".$indirizzo."<br/>";	  
  }
?>

A me così funziona.
 
Ultima modifica:
grazie Satifal


Ho provato sul mio server (su Aruba con PHP4) ma continua a darmi questo errore:

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /web/htdocs/www......test1/letturaxml.php on line 14

sulla linea: $nome = $ele_nome->item(0)->nodeValue;


Il problema potrebbe essere legata alla versione di PHP (PHP Version 4.4.9), oppure dovrei modificare qualche impostazione?
 
Credo dipenda dalla versione di PHP. Io ho fatto le prove con la 5.1.2. Se utilizzi la 4 puoi vedere QUI. Non dovrebbe essere difficile guardando un po' di esempi.
Comunque Aruba supporta PHP5, se non hai motivi o necessità particolari dal pannello di controllo puoi passare dalla versione 4 alla versione 5 di PHP.
 
Dal pannello di controllo del sito ho cambiato versione del php utilizzabile dal server (sono passato dalla 4.5 alla 5.2) ed è tutto ok.

Grazie satifal
 

Discussioni simili