- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Pillola] Leggere il contenuto di un file XML
-
Non ho ancora esigenze di lettura file xml, ma non appena ne avrò mi getterò a capofitto su questo script, quindi ringrazio anticipatamente.;)
-
Testato e funziona bene (bel lavoro Sups ).
Lancio un sasso nello stagno (ho poco tempo a disposizione): verificare se il nodo è codificato a 64bit e decodificarlo con base64_decode(nodo)
-
Per Leggere il documento xml in modalità SAX?
PS: Per scrivere su un file xml?
-
Questa cosa capita proprio a fagiolo!!!
Stavo cercando proprio oggi di realizzare un progetto in cui avevo bisogno dell'XML,ma il mio primo problema è questo:
Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in
la riga a cui si riferisce è : $dom = new DOMDocument();
Perchè?
P.S. Ho già abilitato l'estenzione necessaria!
-
@Napster said:
Per Leggere il documento xml in modalità SAX?
Prova questo script:
[php]
<?phpEsempio d'uso:
include ("parserXML.php");
$data = parse_file("example.xml");
echo "<pre>"; print_r($data); echo "</pre>";
$struct = array();
Funzioni di callback
function startElement($parser, $name, $attrs)
{
global $struct;
$tag = array("name"=>$name,"attrs"=>$attrs);
array_push($struct,$tag);
}function data($parser, $data)
{
global $struct,$i;
if(trim($data))
{
$struct[count($struct)-1]['data']=$data;
}
}function endElement($parser, $name)
{
global $struct;
$struct[count($struct)-2]['child'][] = $struct[count($struct)-1];
array_pop($struct);
}Funzione che parsa il file passatogli nell'argomento e restituisce
una struttura ad albero oggetti-array contenente il documento
function parse_file($file){
global $struct;
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "data");$parse = xml_parse($xml_parser,file_get_contents($file));
if(!$parse) {
die("Errore parsing XML");
xml_parser_free($xml_parser);
}return $struct;
}
?>
[/php]Ciao!
-
Ciao a tutti.
ho provato lo script per leggere il file xml con il Dom. Ma mi da il seguemte errore;
Fatal error: Cannot redeclare xmltree() in C:\Program Files\EasyPHP 2.0b1\www\testXml.php on line 74Come si può capire utilizzo la EasyPhp2.0 che utilizza la versione di Php 5.
Come posso risolvereGrazie a tutti Ciao
-
Ho provato lo script ma non trova la Dom, come si attiva ?
Sto usando in locale Easyphp.
Grazie
-
Ho questo errore :
Fatal error: Cannot instantiate non-existent class: domdocument in c:\programmi\easyphp1-7\www\xml\leggibet.php on line 6
-
Ciao Dragone67,
E' un pò di tempo che non uso easyphp, ma penso che per attivare le estensione DOM basta seguire il modello generale:
Mi sembra di aver capito che sei su win:
tratto da http://it2.php.net/domxml
""Gli utenti Windows devono abilitare php_domxml.dll dal php.ini per potere utilizzare queste funzioni. In PHP 4 this DLL resides in the extensions/ directory within the PHP Windows binaries download. La DLL per questa estensione PECL può essere scaricata dalla pagina » PHP Downloads oppure da » http://pecl4win.php.net/ Inoltre, per potere utilizzare queste funzioni, occorre che una DLL aggiuntiva sia presente nella PATH del sistema. In PHP 4 questa DLL si trova nella directory dlls/. Il suo nome: Per PHP <= 4.2.0, è libxml2.dll. Per PHP >= 4.3.0, è iconv.dll. E dal PHP 5.0.0 iconv è compilata nell'eseguibile PHP per Windows, percui non vi è più bisogno di dll aggiuntive.
""dovrebbe esserti utile..
se poi c'è qualcuno che ha avuto esperienze dirette con easyphp aspettiamo..
-
@Sups said:
Se avete problemi a ricavare informazioni da un file XML, ecco a voi un semplice script PHP che, attraverso l'utilizzo della classe DOM, è in grado di eseguire un parsing del file XML.
Ciao Sups, ho provato il tuo script e funziona perfettamente. Il mio obbiettivo finale è quello di importare tutte queste informazioni dal file XML ad una tabella mysql in quanto ho un file XML generato da un programma con all'interno un elenco articoli. Questo elenco vorrei caricarlo su mysql per gestirlo con php e query.
Puoi darmi qualche consiglio?
ciao
-
Ciao Sark, puoi utilizzare il parser xml per leggere tutti i nodi del file XML e salvi il contenuto in una tabella realizzata con l'uso di un array multidimensionale.
Successivamente leggi il contenuto della tabella e invii i dati al DB con apposite query.
Oppure per limitare la complessità, appena letto il valore del nodo, lo invii direttamente al DB.Ciao!
-
@Sups said:
Ciao Sark, puoi utilizzare il parser xml per leggere tutti i nodi del file XML e salvi il contenuto in una tabella realizzata con l'uso di un array multidimensionale.
ok direi che è fuori dalla mia portata! hai a disposizione del codice da farmi vedere o un qualche link a siti che possa studiare che trattano gli array multidimensionali?
a livello di concetto ho capito quello che mi hai detto di fare ma non lo so scrivere in php perchè non sono esperto.
ciao!
-
Ho creato un semplice script che legge un file XML e crea le query SQL per l'inserimento dei dati nel DB.
Codice XML
<?xml version="1.0"?> <database> <utente> <nome>Andrea</nome> <user>Sups</user> <anno_nascita>1985</anno_nascita> </utente> <utente> <nome>Mario</nome> <cognome>De Rossi</cognome> <residenza>Italia</residenza> </utente> </database>
Per come è concepito il codice:
<utente> = Nome della tabella
<nome>, <cognome>, ecc... = Nome dei campi della tabella
Andrea, Mario, ecc... = Valori da inserire nella tabellaIl codice è questo:
[PHP]
<?php
$xml_path = "file.xml";$i = 0; $query = ""; $dom = new DOMDocument(); $dom -> preserveWhiteSpace = false; @$dom -> load($xml_path) or die("File XML non valido!"); $root = $dom -> documentElement; if(@$root -> hasChildNodes()) { xmltree($root, 0); echo $query; } function xmltree($nodo, $p) { $p++; $figli = $nodo -> childNodes; foreach($figli as $figlio) { if(substr($figlio -> nodeName, 0, 1) != "#") { // <utente> = Nome della tabella if($p == 1) { $GLOBALS['query'] .= "<br>INSERT INTO " . $figlio -> nodeName . " SET "; $GLOBALS['i'] = 0; } else { if($GLOBALS['i'] == 1) { $GLOBALS['query'] .= ", " . $figlio -> nodeName . " = '"; } else { $GLOBALS['query'] .= $figlio -> nodeName . " = '"; $GLOBALS['i'] = 1; } } } // Valori dei nodi if($figlio -> hasChildNodes()) { xmltree($figlio, $p); } else { $GLOBALS['query'] .= $figlio -> nodeValue . "'"; } } }
?>
[/PHP]Ciao!
-
Grazie 1000 Sups!
Ho fatto delle prove e ora riesco con il tuo script a popolare una tabella in mysql partendo da un file xml.non riesco però ad eseguire gli aggiornamenti.
essendo il file xml un elenco di articoli, devo aggiornarlo spesso per poter per es modificare le quantità disponibili.puoi aiutarmi?
-
@Sark said:
non riesco però ad eseguire gli aggiornamenti.
essendo il file xml un elenco di articoli, devo aggiornarlo spesso per poter per es modificare le quantità disponibili.Non ti posso rispondere perchè non conosco il tipo di relazione tra XML e l'articolo, cioè com'è strutturato quest'ultimo all'interno del file XML e come deve essere rappresentato nel DB.
Però potresti sostituire INSERT INTO con UPDATE, la query SQL che permette l'aggiornamento di righe già esistenti.
-
Salve,
ho trovato lo script su internet, mi serve ma vorrei modificare una cosa... in pratica mi serve che il file xml non sia sul server dove è stato avviato lo script, ma su un altro server, come faccio a richiamarlo???
-
Grazie Sups|
Script molto utile!!!
Perfetto anche per il file xml remoto!!!!!