Precedente :: Successivo |
Autore |
Messaggio |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 17 Dic 2008 11:15 Oggetto: * [PHP/XML] Installazione di SimpreXML e Dom |
|
|
Salve utenti.
Da molto tempo che non scrivo su questo forum (o preso l'occasione per imparare a fare dei layout con div ansiche con tabelle).
Cmq scrivo questa nuova discusione perche non sapendo come fare ad fare uno script php che legge e un'altro che scrivi dadi su documenti XML e avendo provato già il medodo SempreXML e Dom non riesco uqualmente a fare ciò, ora io uso IIS per windows XP e PHP5, macari potrei sapere se dovrei configurare qualcosa per utilizare queste due funzioni (SimpleXML ; Dom) ho posso benissimo fare uno script senza configurarle, se e cosi mi date un buon tutorials per imparare, lo provati quasi tutti ma niente.
Aspetto vostre risposte. |
|
Top |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 17 Dic 2008 16:24 Oggetto: Re: [PHP/XML] Lettura / scrittura file XML con SimpreXML e D |
|
|
sevenjeak ha scritto: | Salve utenti.
Da molto tempo che non scrivo su questo forum . | Già, bentornato sevenjeak! :ciao
p.s. SimpreXML o SempreXML o SimpleXML ? (L'hai scritto in 3 modi diversi). |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 17 Dic 2008 22:19 Oggetto: |
|
|
Ciao,
senza usare librerie particolari generare un documento xml non è difficile ma leggerci dentro sì.
Io utilizzo DOM. Per poterlo usare devi aver installato php-xml, dovresti vedere se c'è tramite un bel "phpinfo();".
Allora, per generare un documento a partire da zero:
Codice: |
<?php
// creo il documento
$xmlDoc=new DOMDocument('1.0','UTF-8'); // xml ver 1.0 con codifica utf8
/*
Aggiungo la root, una sola!!!
La riga che segue crea un nodo e lo chiama root
*/
$xmlRoot=$xmlDoc->createElement('root');
// aggiungo il nodo al documento
$xmlDoc->appendChild($xmlRoot);
// aggiungo un nodo "persone" a root
$xmlPersone=$xmlDoc->createElement('persone');
$xmlRoot->appendChild($xmlPersone);
// aggiungo a "persone" alcuni nodi "persona" con dei figli
for ($i=0;$i<3;++$i)
{
$xmlPersona=$xmlDoc->createElement('persona');
$xmlPersone->appendChild($xmlPersona);
$xmlNome=$xmlDoc->createElement('nome','nome'.$i);
$xmlPersona->appendChild($xmlNome);
$xmlCognome=$xmlDoc->createElement('cognome','cognome'.$i);
$xmlPersona->appendChild($xmlCognome);
$xmlIndirizzo=$xmlDoc->createElement('indirizzo','indirizzo'.$i);
$xmlIndirizzo->appendChild($xmlIndirizzo);
}
// Converto in stringa il documento creato
$out=$xmlDoc->saveXML();
?>
|
Se non ho scritto vaccate, il precedente script genera il documento che segue:
Codice: |
<root>
<persone>
<persona>
<nome>nome0</nome>
<cognome>cognome0</cognome>
<indirizzo>indirizzo01</indirizzo>
</persona>
<persona>
<nome>nome1</nome>
<cognome>cognome1</cognome>
<indirizzo>indirizzo1</indirizzo>
</persona>
<persona>
<nome>nome2</nome>
<cognome>cognome2</cognome>
<indirizzo>indirizzo2</indirizzo>
</persona>
</persone>
</root>
|
In pratica dopo aver creato un documento con DOMDocument(...) che io ho chiamato $xmlDoc, tramite il metodo "DOMDocument::createElement($nomeNodo[,$valore])" si crea un nodo e con
"$nodo->appendChild($figlio)" si crea un figlio $figlio di $nodo con $figlio creato appunto con
"$figlio=$xmlDoc->createElement('figlio')".
l'ultima riga genera una stringa $out con l'xml ottenuto: se vuoi buttarlo al browser dovrai mettere l'header xml:
Codice: |
<php
header ("content-type: text/xml");
...
$out=$xmlDoc->saveXML();
print $out;
?>
|
invece per salvare direttamente su disco:
<php
$xmlDoc->save('/home/utente/pippo.xml');
?>
Leggere (e editare) un file xml è lo stesso semplice:
Codice: |
<php
$xmlDoc=new DOMDocument(); // no versione, no codifica
// carico il file xml /home/utente/pippo.xml
$xmlDoc->load('/home/utente/pippo.xml');
/*
ora posso pasticciare il documento.
per esempio, per cambiare il valore del nodo <nome> con valore "nome1" in "ugo"
posso fare:
*/
$nomi=$xmlDoc->getElementsByTagName('nome');
// nomi contiene tutti i nodi <nome> nell'ordine in cui compaiono
foreach ($nomi as $nome)
{
if ($nome->textContent=='nome1')
{
// creo un nodo nuovo con il valore "ugo"
$xmlNewNome=$xmlDoc->createElement('nome','ugo');
// e lo sostituisco a $nome
$nome->parentNode->replaceChild($xmlNewNome,$nome);
}
}
// salvo il file con le modifiche (sovrascrivendolo)
$xmlDoc->save('/home/utente/pippo.xml');
?>
|
Come vedi, non puoi modificare direttamente il valore di un nodo ma devi risalire al suo genitore e sostituirgli il figlio.
Ci sono altre funzioni che servono a creare gli attributi, a settarli, a clonare i nodi etc...
Poi puoi anche fare delle query xpath e tante tante cose.
Qui c'è la doc ufficiale.
Ciao
P.S.
Non ho provato il codice, quindi non so se va, sicuramente l'idea è quella. |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 18 Dic 2008 11:52 Oggetto: |
|
|
Intanto ringrazio chemicalbit per il ben tornato nel forum.
Php/xml, non dovrei averle installati, su un tutorial on-line pochi giorni fa ho trovato come installarlo, ma su Apache, io ho IIS con php incorporato ed non saprei come installarlo.
ha, quasi dimenticavo, con phpinfo() ho provato a vedere ma non ho trovato niente al riquardo, non c'è la dovrei avere installata, se e cosi come potrei installarla su IIS? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 18 Dic 2008 12:49 Oggetto: |
|
|
Ciao,
non avevo letto che avevi scritto IIS, scusa.
Mah, non ho mai usato php+iis però credo che in questo caso occorra passare per le pecl (qui).
Purtroppo neppure queste le ho mai usate direttamente quindi non saprei che dirti, per scaricare estensioni passo direttamente da pear.
Ciao |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 18 Dic 2008 20:17 Oggetto: |
|
|
freemind ha scritto: | Ciao,
non avevo letto che avevi scritto IIS, scusa.
Mah, non ho mai usato php+iis però credo che in questo caso occorra passare per le pecl (qui).
|
Non ho capito bene che devo installare su IIS per i file XML, essendo la pagina in inglese , mi potresti mandare direttamente una pagina in italiano o il downloading dell'estenzione che mi serve? |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 18 Dic 2008 20:42 Oggetto: |
|
|
sevenjeak ha scritto: | freemind ha scritto: | Ciao,
non avevo letto che avevi scritto IIS, scusa.
Mah, non ho mai usato php+iis però credo che in questo caso occorra passare per le pecl (qui).
|
Non ho capito bene che devo installare su IIS per i file XML, essendo la pagina in inglese , mi potresti mandare direttamente una pagina in italiano o il downloading dell'estenzione che mi serve? | programmare=inglese
E' importantissimo l'inglese.Prova a tradurre con google non è una traduzione perfetta(anzi è pessima) però qualcosa ci capisci  |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 18 Dic 2008 22:10 Oggetto: |
|
|
Non lo capisco proprio coma fare.
Cmq, ho visto con la funzione phpinfo(), nella sessione com_dotnet o questo schema:
Codice: |
COM Support = enable
DCOM Support = disable
.NET Support = enable
|
Immagina che il valore disable sulla DCOM Support vuol dire che il supporto sia disattivato, ma tre sessione dopo, avendo visto la sessione DOM ho notata che sta tutto su enable insieme ha DOM/XML.
lo dovro configurare meglio per leggere e scrivere su file xml, se e si come? |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 18 Dic 2008 22:24 Oggetto: |
|
|
Guarda,
sono in giro quindi non ho molte possibilità di ricerca però se trovo qualcosa per pecl in italiano lo posto.
Per tutto quello che hai scritto nell'ultimo post non so che dirti, php+iis non l'ho mai fatto e .net l'ho abbandonato da tempo e comunque lo usavo per applicativi desktop.
Purtroppo non posso aiutarti.
Ciao |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 21 Dic 2008 18:31 Oggetto: |
|
|
Cerco di vedere anchio qualcosa o aspetto una tua risposta.
P.S. : Se solo mi potresti dire un modo per installare e impostare le estenzione di xml per utilizarlo in php? sempre se nn ho l'estenzione per i file xml. |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 21 Dic 2008 20:13 Oggetto: |
|
|
La documentazione ufficiale dice che occorre avere il modulo php-xml installato. Le funzioni poi fanno parte del core.
Guarda nel php.ini dove vengono caricate le dll usate da php, dovresti trovare qualche cosa che riguarda xml e che probabilmente dovrai decommentare.
Ora ti faccio una domanda: sei obbligato ad usare php+iis oppure potresti passare ad apache2 come web-server? Se ti è possibile io ti consiglio di farlo e a quel punto sarà tutto più facile. |
|
Top |
|
 |
mdweb Dio maturo


Registrato: 18/12/07 16:59 Messaggi: 4412
|
Inviato: 22 Dic 2008 13:54 Oggetto: |
|
|
freemind ha scritto: | La documentazione ufficiale dice che occorre avere il modulo php-xml installato. Le funzioni poi fanno parte del core.
Guarda nel php.ini dove vengono caricate le dll usate da php, dovresti trovare qualche cosa che riguarda xml e che probabilmente dovrai decommentare.
Ora ti faccio una domanda: sei obbligato ad usare php+iis oppure potresti passare ad apache2 come web-server? Se ti è possibile io ti consiglio di farlo e a quel punto sarà tutto più facile. |
Lo consiglio.Anche perchè IIS+php non mi piace affatto.
Doc ufficiale di SimpleXML
Tratto da html.it
php.html.it/articoli/leggi/1763/simplexml-gestire-xml-in-php-5/
Citazione: |
Le librerie che possiamo considerare standard che permettono l'accesso in lettura, modifica ed eventualmente interrogazione di file XML sono fondamentalmente DOM e SAX. PHP fornisce un'implementazione di entrambe le librerie, anche se a partire dalla versione 5 espone un sistema molto più semplice e diretto per accedere ai file XML: la libreria SimpleXML abilitata di default all'interno del motore PHP.
La libreria in questione ha il grosso vantaggio di avere un'interfaccia ad oggetti molto semplice ed intuitiva, che, a differenza del più prolisso DOM, richiede pochissime righe di codice per accedere agli elementi interessati e mantiene intatta la struttura del file XML anche nella sua rappresentazione interna (a differenza di SAX che ci obbliga a tener traccia manualmente delle gerarchie durante la gestione degli eventi generati). In aggiunta espone una funzione, che vedremo alla fine dell'articolo, che permette di eseguire query XPath sull'oggetto per recuperare nodi specifici.
Leggere file XML
Il primo esempio che andrò ad illustrare si propone di leggere un file XML e restituire in output il valore di alcuni attributi ed il contenuto di alcuni elementi testuali. Il file XML d'esempio sarà il seguente:
Codice: |
<?xml version="1.0" encoding="utf-8"?>
<articles>
<article id="1">
<title>Articolo numero 1</title>
<author>Gabriele Farina</author>
</article>
<article id="2">
<title>Articolo numero 2</title>
<author>Gabriele Farina</author>
</article>
<article id="3">
<title>Articolo numero 3</title>
<author>Francesco Caccavella</author>
</article>
</articles>
|
Poniamoci come obiettivo quello di estrarre un elenco di tutti gli articoli:
Codice: |
<?php
$xml = simplexml_load_file('articles.xml');
echo "<h3>Articoli salvati nel file articles.xml (".count($xml->article).")</h3>";
echo "<ul>";
foreach($xml->article as $article)
{
echo '<li><a href="showarticle.php?id='.$article['id'].'">'.$article->title.'</a> <em>(di '.$article->author.')</em></li>';
}
echo "</ul>";
?>
|
Eseguendo lo script otteniamo un output corretto estratto con facilità dal file XML. Utilizzando la funzione simplexml_load_file (segnata in rosso nel codice) carichiamo all'interno di un oggetto SimpleXML il contenuto di un file passato come argomento (in verde nel codice). l'argomento può essere sia un file che risiede sulla macchina locale come un file che risiede in remoto su un altro server. L'oggetto restituito rappresenta la root del nostro documento XML: espone una proprietà per ogni nodo figlio che può essere un array (nel caso ci siano più figli omonimi) o un elemento singolo e permette di accedere agli attributi utilizzando la sintassi che normalmente viene utilizzata per accedere ad elementi specifici di un array.
In questo modo l'iterazione è veramente semplice: per ottenere lo stesso risultato usando DOM o SAX avremmo dovuto operare con script più intricati o più lunghi da scrivere. Tutta questa semplicità va a discapito di un po' di funzionalità che, al momento, non sono contemplate all'interno della libreria SimpleXML: i commenti e le processing instructions sono saltate e non vengono salvate durante il parsing del documento. Dato che comunque SimpleXML si propone come una libreria per gestire in modo semplice documenti XML semplici, queste non sono mancanze che attualmente complicano il modo di operare.
(segue con altri sorgenti)
|
Riferimento alla w3c
Tratto da mrwebmaster.it
www.mrwebmaster.it/php/articoli/parsare-documento-xml-php-5-simplexml_669.html
Citazione: |
Parsare un documento XML con PHP 5 e SimpleXML
1. Introduzione a SimpleXML
Come è noto, parsare un documento XML significa manipolarlo attraverso un linguaggio utilizzato come interfaccia, in generale le azioni di parsing riguardano l'accesso in lettura, la modifica e l'interrogazione di un file XML. In PHP, fino alla versione 4, per il parsing di documenti XML venivano sfruttate in particolar modo le note librerie DOM e SAX, ma grazie ha PHP 5 abbiamo ora a disposizione un nuovo strumento basato su un'interfaccia ad oggetti, SimpleXML, che ha l'indubbio vantaggio di rendere più facile il compito dello sviluppatore.
Rispetto a SAX, SimpleXML conserva del tutto la struttura propria del file XML anche per quanto riguarda la rappresentazione interna; quindi, non sarà più necessario gestire gli eventi prodotti dal documento tracciandone manualmente le gerarchie.
Rispetto a DOM, vi è innanzitutto un vantaggio indiscutibile nella creazione degli script per il parsing, SimpleXML necessita infatti di una sinatssi molto più semplice e listati di conseguenza molto più "leggeri".
SimpleXML, mette inoltre a disposizione la possibilità di eseguire azioni di ricerca all'interno dei file XML, per la precisione query basate sul metodo XPath dell'oggetto SimpleXML, gestibili attraverso l'introduzione di alcune semplici funzione native.
Nel corso di questa breve serie di articoli su SimpleXML, utilizzeremo un semplice documento XML generato dinamicamente da parsare secondo le varie modalità previste dalla libreria in oggetto, ne riportiamo di seguito il listato completo mettendolo a disposizione del lettore per eventuali test:
Codice: |
<?php
$doc_xml = <<<XML
<?xml version='1.0' standalone='yes'?>
<news>
<articolo>
<titolo>Guida a XML</titolo>
<info>
<informazioni>
<autore>Eliox</autore>
<argomento>PHP e SimpleXML</argomento>
</informazioni>
<informazioni>
<autore>Luke</autore>
<argomento>XML in PHP e ASP</argomento>
</informazioni>
</info>
<descrizione>Guida completa al parsing XML.</descrizione>
<data type="it">21 08 06</data>
<data type="uk">06 08 21</data>
</articolo>
</news>
XML;
?>
|
Chiameremo il file contenente il codice appena presentato "test.php" e lo includeremo in tutti i gli esempi dei prossimi articoli.
2. Accesso agli elementi di un file XML con SimpleXML e PHP
La funzione simplexml_load_string() interpreta una stringa, contenuta in un documento XML, all'interno di un oggetto della classe SimpleXMLElement le cui proprietà contengono i dati rilevati all'interno della stringa.
Ne consegue che la funzione appena descritta potrà essere utilizzata per l'accesso in lettura di elementi e contenuti all'interno di un documento XML; nel prossimo esempio la nostra azione di parser sul file "test.php" sarà indirizzata verso l'elemento "<descrizione>" presente nel listato:
Codice: |
<?php
include 'test.php';
$xml = simplexml_load_string($doc_xml);
echo $xml->articolo[0]->descrizione;
?>
|
Dall'esecuzione del codice proposto, otterremo la stampa a video del dato contenuto all'interno del tag in esame, quindi visualizzeremo la stringa:
Codice: |
Guida completa al parsing XML.
|
Questo perchè la funzione individua l'elemento indicato attraverso l'istanza dell'oggetto della classe SimpleXMLElement ("$xml->articolo[0]->descrizione"); i dati relativi al tag divengono quindi parte delle proprietà dell'oggetto e di conseguenza divengono accessibili.
La funzione simplexml_load_string() permette di parsare sia elementi singoli che multipli all'interno delle gerarchie di tag XML. Questo ci consente di isolare tutte le istanze appartenenti ad un determinato elemento ricorrendo ad un semplice ciclo di iterazione:
Codice: |
<?php
include 'test.php';
$xml = simplexml_load_string($doc_xml);
foreach ($xml->articolo as $articolo)
{
echo $articolo->descrizione, '<br />';
}
?>
|
Quindi, in presenza di più contenuti delimitati dall'elemento "<descrizione>", verrà creato un array contenente tutti i dati rilevati all'interno del ciclo foreach che per ciascun nodo "<articolo>" stamperà un diverso dato appartenente a "<descrizione>".
(segue con altri sorgenti)
|
Tratto da devzone
Link
Citazione: |
Introduction
"Simplicity of character is no hindrance to the subtlety of intellect."
- John Morley
When people ask me "What is SimpleXML?" I often quip, "XML is the solution to all your problems; SimpleXML ensures it isn't the root of your problems!"
Those of you who have parsed XML with PHP4, or are currently dealing with XML parsing in PHP4, know that it can indeed be very painful to handle documents with any degree of complexity. You either need to use the SAX approach and write a handwritten parser for every document, or you need to use the DOM extension; which (in addition to its tendency to crash, leak and generally misbehave under heavy usage) involves the pain of processing documents using an API designed for a heavily object oriented language and targeted at supporting every single one of XML's idiosyncrasies.
(segue con sorgenti)
|
Di documentazione poi c'è tanta  |
|
Top |
|
 |
sevenjeak Semidio


Registrato: 04/02/08 22:05 Messaggi: 308 Residenza: Roma
|
Inviato: 26 Gen 2009 23:05 Oggetto: |
|
|
Scusate per il ritardo della risposta (non ricordavo nemmeno che avevo scritto questo post) cmq non saprei se avrei installato le ddl per xml, ho provato facendo lo script trovato su html.it col simpleXML, non mi ristituisce nulla, ne errore, ne niente. Mentre con il DOMDocument mi da errore, non saprei.
Come risolvere.
Nel mio web server è installato il supporto per xml? |
|
Top |
|
 |
|
|
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
|
|