Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Parsare documento XML con PHP

    Salve

    Dato il seguente file "collection.xml"

    codice:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <collection>
    
    	<cd>
    		<title>Fight for your mind</title>
    		<artist>Ben Harper</artist>
    		<year>1995</year>
    	</cd>
    	
    	<cd>
    		<title>Electric Ladyland</title>
    		<artist>Jimi Hendrix</artist>
    		<year>1997</year>
    	</cd>
    	
    </collection>
    come faccio con PHP a selezionare il "title", "artist" e "year" del contenitore "cd" che contiene "artist" == "Jimi Hendrix" ?

    grazie mille

  2. #2

    Re: Parsare documento XML con PHP

    ho devo necessariamente usare XSL?

  3. #3
    Codice PHP:
    $filename="file.xml";
        if(!(
    $fp fopen("$filename"r")))
            die(
    "Non posso aprire il file");
        
    $elenco_counter 0;
        
    $elenco_data = array();
        
    $xml_current_tag_state '';
        
        function 
    startElementHandler($parser$element_name$element_attribs)
        {
        global 
    $elenco_counter;
        global 
    $elenco_data;
        global 
    $xml_current_tag_state;
        
    $xml_current_tag_state $element_name;
        }
        
        function 
    endElementHandler($parser$element_name)
        {
        global 
    $elenco_counter;
        global 
    $elenco_data;
        global 
    $xml_current_tag_state;
        
    $xml_current_tag_state '';
        if( 
    $element_name == "CD" 
            {
                
    $elenco_counter++;
            }
        }
        
        function 
    characterDataHandler($parser $data)
        {
        global 
    $elenco_counter;
        global 
    $elenco_data;
        global 
    $xml_current_tag_state;
        if( 
    $xml_current_tag_state == '' )
        return;
        if( 
    $xml_current_tag_state == "TITLE" 
            {
                
    $elenco_data[$elenco_counter]["title"] = $data;
            }
        if( 
    $xml_current_tag_state == "ARTIST" 
            {
                
    $elenco_data[$elenco_counter]["artist"] = $data;
            }
        if( 
    $xml_current_tag_state == "YEAR" 
            {
                
    $elenco_data[$elenco_counter]["year"] = $data;
            }
    }

    if( !(
    $xml_parser xml_parser_create()) )
    die(
    "Non riesco a creare il parser XML");

    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;
        }
    }
    //libero la memoria
    xml_parser_free($xml_parser); 
    poi per leggere i dati:
    Codice PHP:
    <?php
    for($i=$i $elenco_counter ; ++$i)
    {
    //decommenta la riga sottostante se vuoi l'id della news
    //echo $i . "
    \n";
    echo "
    Title" . $elenco_data[$i]["title"] . "
    \n";
    echo "
    Artist" . $elenco_data[$i]["artist"] . "
    \n";
    echo "
    Year" . $elenco_data[$i]["year"] . "
    \n";
    echo "
    \n";
    }
    ?>

  4. #4
    grazie mille ma, potresti spiegarmi un pochino il codice da te postato?

    grazie

  5. #5
    e magari anche i tempi di esecuzione?

    grazie ancora!!!

  6. #6
    c'è un modo per fare questo usando XSL tramite PHP?

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.