dovrei utilizzare la funzione
simplexml_load_file()
nel mio sito, ma il php di altervista non la riconosce perché la funzione vuole php 5.
conoscete qualcopsa di simile per il php 4 di altervista?
la funzione carica un documento xml
dovrei utilizzare la funzione
simplexml_load_file()
nel mio sito, ma il php di altervista non la riconosce perché la funzione vuole php 5.
conoscete qualcopsa di simile per il php 4 di altervista?
la funzione carica un documento xml
Esiste il parser xml!!! Certamente è più ostico da utilizzare, ma realizzare una clone delle simplexml completamente in PHP non è difficile... comunque dipende tutto da quello che vuoi fare tu. Magari dacci più chiarimenti
Puoi trovare maggiori informazioni sul parser xml in php all'indirizzo
http://it2.php.net/manual/it/ref.xml.php
dovrei aprire un file .xml, e da questo estrarre i dati contenuti tra i tag.
con simplexml, caricavo il file, e poi stampavo una tabella con le varie componenti.il codice era il seguente.
$xml=simplexml_load_file("file.xml");
print "<table border=\"1\" cellpadding=\"10\" cellspacing=\"2\">";
print "<th colspan=\"4\">";
$j=0;
while($xml->personal->item[$j]){
$j++;
}
print $xml->personal->title;
print "</th>";
for($i=0;$i<$j;$i++){
print "<tr>";
print "<td>";
print $xml->personal->item[$i]->surname;
print "</td>";
print "<td>";
print $xml->personal->item[$i]->name;
print "</td>";
print "<td>";
print $xml->personal->item[$i]->phone;
print "</td>";
print "<td>";
print $xml->personal->item[$i]->mail;
print "</td>";
print "</tr>";
}
print "</table>";
per quanto riguarda il parser, non ho ben capito come funziona!!!
i codici che il sito php.net mostra sono abbastanza ingarbugliati e non c'è un esempio che mostri come funzioni ogni funzione (scusa la ripetizione!!;p), ma dice solo come sono i valori che devo inserire nella funzione.
Ti sarei grato se potessi illuminarmi.
ciao
Inserisci un esempio di file XML che vuoi leggere con quello, che ti spiego come usare il parser con quest'esempio...
il file è di questo tipo:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<personale>
<titolo>Personale del dipartimento</titolo>
<item>
<cognome>Francescutto</cognome>
<nome>Alberto</nome>
<telefono>+39-</telefono>
<mail>mailto</mail>
<ufficio>casa</ufficio>
<qualifica>fuffi</qualifica>
<orario>ora</orario>
<appelli>prova</appelli>
<modo>quando</modo>
<scritti>devo</scritti>
<fuori-appelli>ma si</fuori-appelli>
<sito>veramente</sito>
<lavoro>certo</lavoro>
</item>
<item>
...
</item>
...
</personale>
grazie dell'aiuto!!!:-)
In questo modo ottieni i dati in questo modo:Codice PHP:
$items = array ();
$title = "";
$corrente = "";
function StartElement ($parser, $name, $attrs) {
global $corrente;
switch ($name) {
case "personale":
break;
default:
$corrente = $name;
$items[] = array();
break;
}
}
function EndElement ($parser, $name) {
global $corrente;
$corrente = "";
}
function CharacterData ($parser, $data) {
global $corrente, $title, $items;
switch ($corrente) {
case "titolo":
$title = $data;
break;
case "":
break;
default:
$items[count($items)-1][$corrente] = $data;
break;
}
}
$xml_data = file_get_contents ("file xml");
$xml = xml_parser_create();
xml_set_element_handler($xml, "StartElement", "EndElement");
xml_set_character_data_handler($xml, "CharacterData");
xml_parse ($xml_data);
$title = titolo nel tag <titolo></titolo>
$items = array associativo, tramite il quale potrai ottenere i vari dati in questo modo:
$items[$indice_item][$tag]
$tag può essere per esempio "cognome", "nome", ecc... In questo modo puoi fare la stessa cosa che facevi con le simplexml ritoccando leggermente il codice che hai postato prima, modificando le parti del tipo
$xml->personale->item[$i]->campo
in questo modo:
$items[$i]["campo"]
Fammi sapere come va e se ci sono problemi, ciao
Provo subito!!
Intanto grazie mille, ti sono debitore!!
ciao, a presto
Ho provato il tuo codice, ma purtroppo non va!
Comunque, in questo lungo weekend, ho spulciato il manuale php, e sono riuscito a trovare (copiare) una soluzione che si poteva adattare bene al mio caso. Non ho capito benissimo quello che fa, ma funziona.
Grazie mille lo stesso.
Il codice che ho copiato è il seguente (come commenti ho inserito quello che sono riuscito a capire :
ciao e ancora grazie
class item {
function item ($matrix){
foreach ($matrix as $k=>$v)
$this->$k = $matrix[$k];
}
}
function readDatabase($filename){
$file=implode("",file($filename)); //carica il file e lo converte in una stringa
$parser=xml_parser_create(); //inizializza il parsing
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); //
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); //indica se includere anche gli spazi bianchi
xml_parse_into_struct($parser, $file, $values, $index); //memorizza il file in
xml_parser_free($parser); //cancella il parser
foreach ($index as $key=>$val){
if ($key=="item"){
$molranges = $val;//riga in cui si trova il tag item
for ($i=0;$i<count($molranges);$i+=2) { //count($molranges)::numero di volte che compare il tag item
$offset = $molranges[$i] + 1; //riga da cui comincia l'item
$len = $molranges[$i + 1] - $offset; //elementi della matrice
$tdb[] = parse(array_slice($values,$offset,$len));
//array_slice::prende $len elementi della matrice a partire dal $offset elemento
}
}
else{
continue;
}
}
return $tdb;
}
// riporta il valore di ogni tag in un array la cui chiave è il nome del tag
//e ritorna un oggetto con chiave il tag e valore il contenuto del tag
//inoltre richiama la funzione item, che permette di muoverlo come un oggetto
function parse($array){
for ($i=0;$i<count($array);$i++){
$element[$array[$i]["tag"]]=$array[$i]["value"];
}
return new item($element);
}