Visualizzazione dei risultati da 1 a 2 su 2

Discussione: XML Parser problem

  1. #1
    Utente di HTML.it L'avatar di nabozzz
    Registrato dal
    Nov 2004
    Messaggi
    145

    XML Parser problem

    Ciao a tutti

    ho un problema con questo parser XML

    Codice PHP:
    $filename="file che restituisce un xml da analizzare";
        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 == "MATCH" ) {
                
    $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 == "ITEM" $person_data[$person_counter]["item"] = $data;
            if( 
    $xml_current_tag_state == "FID" $person_data[$person_counter]["fid"] = $data;
            if( 
    $xml_current_tag_state == "PRODUCTNAME" $person_data[$person_counter]["productname"] = $data;
            if( 
    $xml_current_tag_state == "DESCRIPTION" $person_data[$person_counter]["description"] = $data;
            if( 
    $xml_current_tag_state == "BRAND" $person_data[$person_counter]["brand"] = $data;
            if( 
    $xml_current_tag_state == "MODEL" $person_data[$person_counter]["model"] = $data;
            if( 
    $xml_current_tag_state == "YEAR" $person_data[$person_counter]["year"] = $data;
            if( 
    $xml_current_tag_state == "NOTE" $person_data[$person_counter]["note"] = $data;
            if( 
    $xml_current_tag_state == "ARTICLENO" $person_data[$person_counter]["articleno"] = $data;

    //se vuoi aggiungere altri campi xml 
    //if( $xml_current_tag_state == "NUOVO_TAG_XML" ) {
    //$person_data[$person_counter]["codice"] = $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); 
    All'interno della stringa descrizione (in qualche caso) trovo una parola del tipo ("-thread).
    Questo provoca un bel problema... ovvero tutto il resto della descrizione non viene restituito, ma solamente -thread).

    A rigor di logica credo che il problema sia il doppio slash... tuttavia non sono riuscito in alcun modo ad eliminare questo problema.

    Qualcuno mi può aiutare?? grazie

  2. #2
    Utente di HTML.it L'avatar di nabozzz
    Registrato dal
    Nov 2004
    Messaggi
    145
    Ciao a tutti...
    mi autorispondo, visto che ho risolto il problema e penso che questa cosa possa interessare a molti!

    il mio problema era che a volte, avendo un file XML perfetto come sintassi, tentando di scrivere i dati in mysql avevo grossi problemi. A volte il codice (ARTICLENO) non veniva salvato completo ma solo con un numero variabile di cifre (da 2 a 5), mentre il numero esatto era 6. Si trattava di una decina di codici in 4600 records... tuttavia era molto strana sta cosa! Allo stesso modo... nel campo DESCRIPTION era presente una stringa contenente "-thread .
    Il parser alla fine non prendeva in considerazione tutto i caratteri precedenti all'interno di questa stringa e mi scriveva solo -thread.

    Cercando un po' in giro ho trovato la soluzione.. e sta tutta qui

    questo può dare problemi...
    codice:
    ...
    if( $xml_current_tag_state == "ITEM" ) $person_data[$person_counter]["item"] = $data; 
    if( $xml_current_tag_state == "FID" ) $person_data[$person_counter]["fid"] = $data; 
    ...

    questo è giusto!!!!
    codice:
    ...
    if( $xml_current_tag_state == "ITEM" ) $person_data[$person_counter]["item"] .= $data; 
    if( $xml_current_tag_state == "FID" ) $person_data[$person_counter]["fid"] .= $data; 
    ...
    ovvero... il concatenare!!

    Saluti a tutti
    ... tutti quanti portiamo un tabarro che asconde... qualche volta una gioia, qualche volta un dolore...

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.