Visualizzazione risultati 1 fino 8 di 8

Discussione: xml in php 4

  1. #1
    dinmats non è connesso Neofita
    Data registrazione
    16-01-2006
    Messaggi
    9

    Question xml in php 4

    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

  2. #2
    Guest

    Predefinito

    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

  3. #3
    dinmats non è connesso Neofita
    Data registrazione
    16-01-2006
    Messaggi
    9

    Predefinito

    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

  4. #4
    Guest

    Predefinito

    Inserisci un esempio di file XML che vuoi leggere con quello, che ti spiego come usare il parser con quest'esempio...

  5. #5
    dinmats non è connesso Neofita
    Data registrazione
    16-01-2006
    Messaggi
    9

    Predefinito

    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!!!:-)

  6. #6
    Guest

    Predefinito

    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);
    In questo modo ottieni i dati in questo modo:

    $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

  7. #7
    dinmats non è connesso Neofita
    Data registrazione
    16-01-2006
    Messaggi
    9

    Predefinito

    Provo subito!!
    Intanto grazie mille, ti sono debitore!!
    ciao, a presto

  8. #8
    dinmats non è connesso Neofita
    Data registrazione
    16-01-2006
    Messaggi
    9

    Predefinito

    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);
    }

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •