Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Aiuto parser xml

  1. #1

    Aiuto parser xml

    Salve a tutti avrei bisogno di fare il parser in php di un file xml che per accedervi ho la password ad esempio:

    http://localhost:porta/xml/stats.xml...rd=miapassword

    dentro ci sono tanti blocchi che hanno la stessa parola dell'albero, e dentro ce una parola che può distinguerli esempio:

    - <albero>
    <alias>io </alias>
    <server>localhost</server>
    .....etc ce ne sono altri
    </albero>
    - <albero>
    <alias>tu </alias>
    <server>localhost</server>
    .....etc ce ne sono altri
    </albero>

    e ne ho tanti di questi "albero" io ho bisogno di estrapolare i dati di ogni albero separatamente tramite la parola che è diversa per tutti nell'esempio "io" e "tu".

    Grazie in anticipo.
    KissItaly.com

  2. #2
    Ti giro il parser che ho usato io :


    <html><body>
    <?php
    $filename="http://www.schede.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 == "ITEM" )
    {
    $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 == "NOMECAMPO1" )
    {
    $elenco_data[$elenco_counter]["nomecampo1"] = $data;
    }
    if( $xml_current_tag_state == "NOMECAMPO2" )
    {
    $elenco_data[$elenco_counter]["nomecampo2"] = $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($fp, 4096))
    {
    if( !xml_parse($xml_parser, $data, feof($fp)))
    {
    break;
    }
    }
    //libero la memoria
    xml_parser_free($xml_parser);


    for($i=0 ; $i < $elenco_counter ; ++$i)
    {

    $idlocalita = $elenco_data[$i]["idliv1s"] . $elenco_data[$i]["idliv2s"] . $elenco_data[$i]["idliv3s"] . $elenco_data[$i]["idliv4s"] . $elenco_data[$i]["idliv5s"];

    if ($elenco_data[$i]["nomecampo1"] == "io")
    echo "campo1: " . $elenco_data[$i]["nomecampo1"] . "
    \n";
    echo "campo2: " . $elenco_data[$i]["nomecampo2"] . "
    \n";

    }

    echo "
    \n";


    }

    ?>
    </body></html>


    fammi sapere se riesci ad usarlo.
    Io sto cercando di usarlo e funziona ma a volte mi da problemi!

  3. #3
    Ciao grazie per aver risposto, ti faccio vedere la struttura del mio file xml:

    codice:
    - <MPM>
    - <status>
      <code>0</code> 
      <message>OK</message> 
      </status>
    - <mediapoints>
    - <mediapoint>
      <protocol>2.0</protocol> 
      <ID>1</ID> 
      <mediapointID>1</mediapointID> 
      <alias>/</alias> 
      <server>localhost</server> 
      <viewpath>mms://localhost//</viewpath> 
      <max_bwidth>-1</max_bwidth> 
      <max_clients>-1</max_clients> 
      <max_bitrate>-1</max_bitrate> 
      <cur_viewers>0</cur_viewers> 
      <cur_bwidth>0</cur_bwidth> 
      <active>active</active> 
      <peak_connected>0</peak_connected> 
      <peak_bwidth>0</peak_bwidth> 
      <peak_streaming>0</peak_streaming> 
      <tot_advertisements>0</tot_advertisements> 
      <tot_FileBytesRead>0</tot_FileBytesRead> 
      <tot_StreamTerminations>0</tot_StreamTerminations> 
      <tot_StreamingPlayers>0</tot_StreamingPlayers> 
      <tot_StreamErrors>0</tot_StreamErrors> 
      <tot_StreamDenials>0</tot_StreamDenials> 
      <tot_PlayerBytesSent>0</tot_PlayerBytesSent> 
      <tot_ConnectedPlayers>0</tot_ConnectedPlayers> 
      <tot_LateReads>0</tot_LateReads> 
      </mediapoint>
    - <mediapoint>
      <protocol>2.0</protocol> 
      <ID>1</ID> 
      <mediapointID>1</mediapointID> 
      <alias>Sample_Broadcast</alias> 
      <server>localhost</server> 
      <viewpath>mms://localhost/Sample_Broadcast</viewpath> 
      <max_bwidth>-1</max_bwidth> 
      <max_clients>-1</max_clients> 
      <max_bitrate>-1</max_bitrate> 
      <cur_viewers>0</cur_viewers> 
      <cur_bwidth>0</cur_bwidth> 
      <active>active</active> 
      <peak_connected>0</peak_connected> 
      <peak_bwidth>0</peak_bwidth> 
      <peak_streaming>0</peak_streaming> 
      <tot_advertisements>0</tot_advertisements> 
      <tot_FileBytesRead>0</tot_FileBytesRead> 
      <tot_StreamTerminations>0</tot_StreamTerminations> 
      <tot_StreamingPlayers>0</tot_StreamingPlayers> 
      <tot_StreamErrors>0</tot_StreamErrors> 
      <tot_StreamDenials>0</tot_StreamDenials> 
      <tot_PlayerBytesSent>0</tot_PlayerBytesSent> 
      <tot_ConnectedPlayers>0</tot_ConnectedPlayers> 
      <tot_LateReads>0</tot_LateReads> 
      </mediapoint>
    - <mediapoint>
      <protocol>2.0</protocol> 
      <ID>1</ID> 
      <mediapointID>1</mediapointID> 
      <alias>Cache/Proxy On-Demand</alias> 
      <server>localhost</server> 
      <viewpath>mms://localhost/Cache/Proxy On-Demand</viewpath> 
      <max_bwidth>-1</max_bwidth> 
      <max_clients>-1</max_clients> 
      <max_bitrate>-1</max_bitrate> 
      <cur_viewers>0</cur_viewers> 
      <cur_bwidth>0</cur_bwidth> 
      <active>active</active> 
      <peak_connected>0</peak_connected> 
      <peak_bwidth>0</peak_bwidth> 
      <peak_streaming>0</peak_streaming> 
      <tot_advertisements>0</tot_advertisements> 
      <tot_FileBytesRead>0</tot_FileBytesRead> 
      <tot_StreamTerminations>0</tot_StreamTerminations> 
      <tot_StreamingPlayers>0</tot_StreamingPlayers> 
      <tot_StreamErrors>0</tot_StreamErrors> 
      <tot_StreamDenials>0</tot_StreamDenials> 
      <tot_PlayerBytesSent>0</tot_PlayerBytesSent> 
      <tot_ConnectedPlayers>0</tot_ConnectedPlayers> 
      <tot_LateReads>0</tot_LateReads> 
      </mediapoint>
    - <mediapoint>
      <protocol>2.0</protocol> 
      <ID>1</ID> 
      <mediapointID>1</mediapointID> 
      <alias>Cache/Proxy Broadcast</alias> 
      <server>localhost</server> 
      <viewpath>mms://localhost/Cache/Proxy Broadcast</viewpath> 
      <max_bwidth>-1</max_bwidth> 
      <max_clients>-1</max_clients> 
      <max_bitrate>-1</max_bitrate> 
      <cur_viewers>0</cur_viewers> 
      <cur_bwidth>0</cur_bwidth> 
      <active>active</active> 
      <peak_connected>0</peak_connected> 
      <peak_bwidth>0</peak_bwidth> 
      <peak_streaming>0</peak_streaming> 
      <tot_advertisements>0</tot_advertisements> 
      <tot_FileBytesRead>0</tot_FileBytesRead> 
      <tot_StreamTerminations>0</tot_StreamTerminations> 
      <tot_StreamingPlayers>0</tot_StreamingPlayers> 
      <tot_StreamErrors>0</tot_StreamErrors> 
      <tot_StreamDenials>0</tot_StreamDenials> 
      <tot_PlayerBytesSent>0</tot_PlayerBytesSent> 
      <tot_ConnectedPlayers>0</tot_ConnectedPlayers> 
      <tot_LateReads>0</tot_LateReads> 
      </mediapoint>
    - <mediapoint>
      <protocol>2.0</protocol> 
      <ID>1</ID> 
      <mediapointID>1</mediapointID> 
      <alias>kimmi</alias> 
      <server>localhost</server> 
      <viewpath>mms://localhost/kimmi</viewpath> 
      <max_bwidth>-1</max_bwidth> 
      <max_clients>10</max_clients> 
      <max_bitrate>-1</max_bitrate> 
      <cur_viewers>0</cur_viewers> 
      <cur_bwidth>0</cur_bwidth> 
      <active>active</active> 
      <peak_connected>2</peak_connected> 
      <peak_bwidth>3632000</peak_bwidth> 
      <peak_streaming>2</peak_streaming> 
      <tot_advertisements>0</tot_advertisements> 
      <tot_FileBytesRead>40624110</tot_FileBytesRead> 
      <tot_StreamTerminations>0</tot_StreamTerminations> 
      <tot_StreamingPlayers>5</tot_StreamingPlayers> 
      <tot_StreamErrors>0</tot_StreamErrors> 
      <tot_StreamDenials>0</tot_StreamDenials> 
      <tot_PlayerBytesSent>43757327</tot_PlayerBytesSent> 
      <tot_ConnectedPlayers>5</tot_ConnectedPlayers> 
      <tot_LateReads>1209</tot_LateReads> 
      </mediapoint>
      </mediapoints>
      </MPM>
    come vedi ho diversi mediapoint nel tag mediapoints, io ho bisogno di catturare ogni mediapoint separatamente in php come potrei fare?

    Grazie.
    KissItaly.com

  4. #4
    Nel caso di nodi interni il discorso è un po' + complicato, è necessario complicare la struttura dell'array che memorizza il contenuto dei nodi parsati:


    $filename=".....xml";
    if(!($fp = fopen("$filename" , "r")))
    die("Non posso aprire il file");
    $elenco_counter = 0;
    $mediapoint = array();
    $mediapoint[$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 $prezzo;
    global $elenco_data;
    global $xml_current_tag_state;
    $xml_current_tag_state = '';
    if( $element_name == "ITEM" )
    {
    $elenco_counter++;
    $prezzo[$elenco_counter] = 0;

    }
    }

    function characterDataHandler($parser , $data)
    {
    global $elenco_counter;
    global $prezzo;
    global $elenco_data;
    global $xml_current_tag_state;
    if( $xml_current_tag_state == '' )
    return;
    ...
    if( $xml_current_tag_state == "MEDIAPOINTID" )
    {
    $elenco_data[$elenco_counter]["mediapointid" . $mediapoint[$elenco_counter]] = $data;
    }

  5. #5
    Ciao grazie del tuo aiuto, ti dispiace mettere dei commenti e scrivere per intero la struttura? Xche non sono molto bravo in programmazione e nn capisco molto se mi scrivi il codice cosi.

    Grazie e ciao
    KissItaly.com

  6. #6
    a dir la verità nemmeno io ho capito molto come funziona il codice! Mi ci sto scontrando proprio questo periodo in quanto sto sviluppando un'applicazione x la migrazione da XML a MySql e sto andando avanti ad approssimazioni successive non ti dico con quali difficoltà!!!! Se qualche GURU del PHP volesse darci qualche lume in + ne sarei felice anch'io. Purtroppo non sempre si trovano persone che abbiano il tempo e la voglia di dare gratuitamente qualche spiegazione. Forse con 50 euro alla mano avremmo + fortuna! :master:

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.