Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[PHP/XML] Lettura con la classe DOM
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 05 Set 2009 13:18    Oggetto: [PHP/XML] Lettura con la classe DOM Rispondi citando

:edit by freemind - ho rimosso il riferimento al 3d che avevi aperto nell'altra sezione perchè l'ho rimosso. Grazie per esserti autocorretto!:

Ho creato oggi uno script che legge da un file xml, il codice è questo:
Codice:

<?php
 error_reporting(E_ALL);
 $dom = new DOMdocument('1.0');
 $dom->load('Database/software.xml');
 $root = $dom->getElementsByTagName('software');
 foreach ($root as $rs) {
    // Estrago il valore del nodo <name>
   $nome = $rs->getElementsByTagName('name');
   $nome = $nome->item(0)->nodeValue;
   echo $nome."<br /><br />";
   // Estrago il valore del nodo <desc>
   $desc = $rs->getElementsByTagName('desc');
   $desc = $desc->item(0)->nodeValue;
   echo $desc."<br /><br />";
   // Estrago il valore del nodo <os>
   $os = $rs->getElementsByTagName('os');
   $os = $os->item(0)->nodeValue;
   echo $os."<br /><br />";
   // Estrago il valore del nodo <dim>
   $dim = $rs->getElementsByTagName('dim');
   $dim = $dim->item(0)->nodeValue;
   echo $dim."<br /><br />-------<br />";
 }
?>


Il codice funziona, ma se c'è più di un nodo <software> mi restituisce questo errore:

Warning: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in /membri/sevenjeak/under/Database/software.xml, line: 11 in /membri/sevenjeak/under/software.php on line 4
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 05 Set 2009 15:25    Oggetto: Rispondi citando

Ciao, da quello che ho capito tu stai cercando di leggere un file xml che ha una struttura nella forma:
Codice:

<software>
....
....
</software>
<software>
....
....
</software>

Il file in questione non va bene perchè un documento xml DEVE avere un solo nodo root e il nodo root è quello di primo livello.

Il tuo script funziona se hai solo un nodo software perchè questo viene interpretato appunto come nodo root; fuori da quello non può esistere nulla altrimenti ti ritrovi l'errore che hai riportato.
Prova ad usare un file tipo:
Codice:

<root>
<software>
....
....
</software>
<software>
....
....
</software>
</root>

e dopo aver caricato il documento con il metodo DOMDocument::load() come fai già recuperi il nodo root. Per farlo usa ad esempio:
Codice:

$xml=new DOMDocument('1.0','UTF-8');
$xml->load('test.xml');
   
$xmlRoot=$xml->documentElement;


A questo punto per ciclare dentro i nodi <software> farai una roba tipo:
Codice:

$nodes=$xmlRoot->getElementsByTagName('software');
   
foreach ($nodes as $n)
{
...
}



Ho scritto due righe di codice al volo che ti propongo qui:
Codice:

<?php
   $xml=new DOMDocument('1.0','UTF-8');
   $xml->load('test.xml');
   
   $xmlRoot=$xml->documentElement;
   
   $nodes=$xmlRoot->getElementsByTagName('software');
   
   foreach ($nodes as $n)
   {
      print 'id: ' . $n->getElementsByTagName('id')->item(0)->nodeValue.'<br/>';
      print 'nome: ' . $n->getElementsByTagName('nome')->item(0)->nodeValue.'<br/>';
      print '---<br/>';
   }
?>

su un file xml che si chiama text.xml:
Codice:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <software>
      <id>1</id>
      <nome>uno</nome>
   </software>
   <software>
      <id>2</id>
      <nome>due</nome>
   </software>
</root>

Scusa se non ho usato i nomi che hai usato tu ma non avendo il tuo xml ne ho fatto uno scemo al volo giusto per farti vedere il meccanismo.

ciao ciao
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 05 Set 2009 16:42    Oggetto: Rispondi citando

Ho mezzo le modifiche cha hai fatto, mi restituisce questi errori:

Notice: Undefined variable: dom in /membri/sevenjeak/under/software.php on line 4

Fatal error: Call to a member function load() on a non-object in /membri/sevenjeak/under/software.php on line 4
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 05 Set 2009 18:43    Oggetto: Rispondi citando

Ehm... io la variabile $dom non la uso, il codice che ho scritto andava adattato al tuo... non è che mi posti quello che hai fatto dopo le poche righe che ti ho postato?

Grazie
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 05 Set 2009 19:09    Oggetto: Rispondi citando

Il codice che ora ho è questo:
Codice:

<?php
 error_reporting(E_ALL);
 $xml=new DOMDocument('1.0', 'UTF-8'); 
 $dom->load('Database/software.xml');
 $root= $xml->documentElement;
 $nodes = $root->getElementsByTagName('software');
 foreach ($nodes as $rs) {
    // Estrago il valore del nodo <name>
   $nome = $rs->getElementsByTagName('name');
   $nome = $nome->item(0)->nodeValue;
   echo $nome."<br /><br />";
   // Estrago il valore del nodo <desc>
   $desc = $rs->getElementsByTagName('desc');
   $desc = $desc->item(0)->nodeValue;
   echo $desc."<br /><br />";
   // Estrago il valore del nodo <os>
   $os = $rs->getElementsByTagName('os');
   $os = $os->item(0)->nodeValue;
   echo $os."<br /><br />";
   // Estrago il valore del nodo <dim>
   $dim = $rs->getElementsByTagName('dim');
   $dim = $dim->item(0)->nodeValue;
   echo $dim."<br /><br />-------<br />";
 }
?>
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 09 Set 2009 22:31    Oggetto: Rispondi

Devi decidere se usare $dom o $xml come variabile per contenere il documento xml.

Codice:

...
 $xml=new DOMDocument('1.0', 'UTF-8');
 $dom->load('Database/software.xml');
 $root= $xml->documentElement;
...

Le tre righe sopra sono quelle che hai scritto tu.
Crei una var che si chiama $xml e la usi come documento xml ma poi chiami $dom (che non esiste) per caricare il file.
Poi di nuovo usi $xml come se contenesse il file.

Quindi o nella seconda riga scrivi:
Codice:

 $xml->load('Database/software.xml');

oppure porti tutto a $dom.

Dopo di che non mi pare che tu usi più ne $xml ne $dom quindi il resto potrebbe essere ok
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi