Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Parsing XML con PHP!

  1. #1

    Parsing XML con PHP!

    Salve!
    ho un file XML del tipo:

    Codice PHP:
    <?xml version="1.0" encoding="iso-8859-1" ?> 
      <galleries xmlns="x-schema:gallerySchema.xml">
        <site name="Informatica">
      
        <gallery>
          <name>Software</name> 
          <url>[url]http://www.softaware.it[/url]</url> 
          <type>Assistenza</type> 
        </gallery>
        <gallery>
          <name>Hardware</name> 
          <url>[url]http://www.hardware.com[/url]</url> 
          <type>Assistenza</type> 
        </gallery>
          ...
        </site>
      </gallery>
    e il seguente script per la lettura e la stampa del file:

    Codice PHP:
    <?php
     $filename
    ="prova.xml";
     if( ! (
    $fp fopen"$filename"r" )) )die("Couldn't open xml file!");
     
    $person_counter 0;
     
    $person_data = array();
     
    $xml_current_tag_state '';

     function 
    startElementHandler$parser$element_name$element_attribs ){
        global 
    $person_counter;
        global 
    $person_data;
        global 
    $xml_current_tag_state;
        
    $xml_current_tag_state $element_name;
     }

     function 
    endElementHandler$parser$element_name ){
        global 
    $person_counter;
        global 
    $person_data;
        global 
    $xml_current_tag_state;
        
    $xml_current_tag_state '';
        if( 
    $element_name == "SITE" ) {
            
    $person_counter++;
        }
     }

     function 
    characterDataHandler$parser $data ){
        global 
    $person_counter;
        global 
    $person_data;
        global 
    $xml_current_tag_state;
        if( 
    $xml_current_tag_state == '' )
            return;
            
        if( 
    $xml_current_tag_state == "GALLERY" ) {
            
    $person_data[$person_counter]["gallery"] = $data;
        } 
        if( 
    $xml_current_tag_state == "NAME" ) {
            
    $person_data[$person_counter]["name"] = $data;
        }
        if( 
    $xml_current_tag_state == "URL" ) {
            
    $person_data[$person_counter]["url"] = $data;
        }
        if( 
    $xml_current_tag_state == "TYPE" ) {
            
    $person_data[$person_counter]["type"] = $data;
        }
     }

     if( !(
    $xml_parser xml_parser_create()) ) die("Couldn't create XML parser!");
     
    xml_set_element_handler($xml_parser"startElementHandler""endElementHandler");
     
    xml_set_character_data_handler($xml_parser"characterDataHandler");

     while( 
    $data fread($fp4096) ){
        if( !
    xml_parse($xml_parser$datafeof($fp)) ){
            break; 
    // get out of while loop if we?re done with the file
        
    }
     }

     
    xml_parser_free($xml_parser);
    ?>

    <?php
     
    for( $i=$i $person_counter ; ++$i ){
        
    //$font_color = $person_data[$i]["alignment"] == "good" ? "#0000ff" : "#ff0000";
        
    echo $i "
    \n"
    ;
        echo 
    "site: " $person_data[$i]["site"] . "
    \n"
    ;
        echo 
    "url: " $person_data[$i]["url"] . "
    \n"
    ;
        echo 
    "type: " $person_data[$i]["type"] . "
    \n"
    ;

        
    //echo "nuovo_tag_xml: " . $person_data[$i]["nuovo_tag_xml"] . "
    \n";
        //se vuoi aggiungere nuovo campo
        echo "
    \n";
     }
    ?>
    Ma a quanto pare lo script non vuole saperne di estrapolarmi il nome del sito, l'url e il tipo :master:

    Potrei avere dei consulti?

    Grazie 1000!!!
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  2. #2
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Tu vuoi stampare il contenuto di SITE e di URL, ma questi 2 tag non contengono dati, solo altri tag
    <site> è il contenitoere di tutte le info, mentr <url> contiene un tag <a>

    Se vuoi stampare il nome del sito devi usare
    Codice PHP:
    echo "site: " $person_data[$i]["name"] . "
    \n"

    Se vuoi stampare il contenuto del link devi modificare il blocco:
    Codice PHP:
    if( $xml_current_tag_state == "URL" ) {
        echo 
    "ok";
            
    $person_data[$person_counter]["url"] = $data;
        } 
    con:
    Codice PHP:
    if( $xml_current_tag_state == "A" ) {
        echo 
    "ok";
            
    $person_data[$person_counter]["url"] = $data;
        } 
    Spero di averti aiutato.
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  3. #3
    E no! praticamente il tag
    Codice PHP:
     [url=""] ... [/url
    è un errore, in realtà non esiste... è comparso con il Drag&Drop
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  4. #4
    Comunque quello che vorrei stampare io è il contenuto del tag "<name>" e sotto il contenuto del tag "<url>"...
    Mantisworks.net - Soluzioni dal web per il web!
    SEO, SEM, Software, Siti internet, Grafica e Multimedia

  5. #5
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Per far spuntare il nome devi utilizzare name, non site (come fai tu).
    Per l'url, se davvero non c'è il tag a, come dici, dovrebbe funzionare (ho provato il tuo codice in locale e funziona).
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.