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

    escape caratteri tag xml

    Ciao,
    vorrei sapere se è possibile inserire caratteri non validi in un tag xml sfruttando qualche funzione apposita.
    Ad esempio potrei trovarmi a creare una categoria "ciao Gianni" e quindi avere un tag così:
    <ciao Gianni>
    quindi mi servirebbe:
    X = (stringa che identifica lo spazio bianco con una parola chiave in modo tale da rendere il tag valido)
    <ciaoXGianni>

    Lo so che esistono funzioni come str_replace...preg_replace...ma mi serve per qualsiasi carattere invalido che si trovi nel tag del nodo, quindi vi chiedo se esistono delle soluzioni apposite.

    Avete qualche idea?


    Ciao

    Alberto
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  2. #2
    Sei sicuro di voler intraprendere questa strada?
    Per quale motivo ti serve di creare un XML con una sintassi sconosciuta a priori?

  3. #3
    se ci spieghi meglio le tue necessità vediamo come aiutarti

    ricorda che XML sono solo un set di regole per creare linguaggi descrittivi ovvero con XML, seguendo le regole, ti crei il proprio formato

    nulla ti vieta di fare

    <ciao>
    <nome>Giovanni</nome>
    <nonsocomechiamarlo><![CDATA[qualsiasi tipo di carattere e/o entità sconosciuta qua dentro la puoi buttare senza il benché minimo problema perché lui, quando entra qua dentro, non cerca assolutamente niente se non la terminazione ... ovvero questa qui di seguito ]]></nonsocomechiamarlo>
    </ciao>

    se una cosa del genere, ovviamente è un esempio, non va bene mi sa che conviene che ti crei un formato binario tuo personale con il supporto alla ricorsività se ti serve o qualcosa del genere ... o se ti serve qualcosa di non troppo complesso potresti pensare a CSV
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Ciao, grazie ad entrambi.

    Mi sa che cambio strada allora, però non riesco a trovare il modo per passare da un array a XML
    se mi capita una situazione del genere:
    <ciao>
    Bella zio
    <sottonodo>Sotto Bello zio</sottonodo>
    </ciao>
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  5. #5
    Originariamente inviato da Albertorrr
    Ciao, grazie ad entrambi.

    Mi sa che cambio strada allora, però non riesco a trovare il modo per passare da un array a XML
    se mi capita una situazione del genere:
    <ciao>
    Bella zio
    <sottonodo>Sotto Bello zio</sottonodo>
    </ciao>
    hai due sistemi o ci accedi all'array verticalmente, usando la ricorsività, o ci accedi orizzontalmente, il sistema è un pò più complicato ma non hai problemi con lo stack ... il tutto dipende da quanti livelli potresti avere

    codice:
    function generateXMLfromArray($array)
    {
      $xml = '';
      foreach($array as $key=>$value)
      {
        $xml .= '<' . utf8_encode($key) . '>';
        if (is_array($value) === true)
        {
          $xml .= generateXMLfromArray($value)
        }
        else
        {
          $xml .= utf8_encode($value);
        }
        $xml .= '</' . utf8_encode($key) . '>';
      }
      return $xml;
    }
    un codice del genere (non l'ho testato potrebberò esserci errori ) anche se veramente banale ti permette di costruire un file XML, o un pezzo di esso, partendo dal contenuto ... ovviamente non inserisce l'intestazione, quella la devi mettere tu

    se per esempio ha 3 array, chiamati $clienti, $fatture, $ddt puoi fare una cosa tipo

    codice:
    $xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
    $xml = '<archivio>';
    $xml .= '<clienti>' . generateXMLfromArray($clienti) . '</clienti>';
    $xml .= '<fatture>' . generateXMLfromArray($fatture) . '</fatture>';
    $xml .= '<ddt>' . generateXMLfromArray($ddt ) . '</ddt>';
    $xml = '</archivio>';
    per la lettura dai un occhio a SimpleXML
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    Daniele in questo modo però crea l'albero normale non come questo giusto?
    1 -
    codice:
    <ciao>
    Bella zio
    <sottonodo>Sotto Bello zio</sottonodo>
    </ciao>
    Ho provato con questo array:
    Codice PHP:
        $test = array(
            
    'uno' => "Prima",
            
    'cat2'=> array(
                    
    'cat__' => 'SOTTO',
                    
    'Albero_sotto' => 'Ciao'
            
    ),

        ); 
    e mi ha creato giustamente:
    2-
    codice:
    <uno>Prima</uno>
    <cat2>
              <cat__>SOTTO</cat__>
              <Albero_sotto>Ciao</Albero_sotto>
    </cat2>
    Cosa posso passargli per farmi creare la prima(1-) situazione?


    EDIT:
    Ho risolto così
    codice:
        $test = array(
            'uno' => "Prima",
            'cat2'=> array(
            		'__solo__' => 'ciaobello',
    				'cat__' => 'SOTTO',
    				'Albero_sotto' => 'Ciao'
            ),
        );
    Codice PHP:
    function generateXMLfromArray($array)
    {
      
    $xml '';
      foreach(
    $array as $key=>$value)
      {
        
    //$xml .= '<' . utf8_encode($key) . '>';
        
    if (is_array($value) === true)
        {
          
    $xml .= '<' utf8_encode($key) . '>';
          
    $xml .= generateXMLfromArray($value);
          
    $xml .= '</' utf8_encode($key) . '>';
        }
        elseif(
    $key=="__solo__")
        {
          
    $xml .= utf8_encode($value);
        }   
        else
        {
            
    $xml .= '<' utf8_encode($key) . '>';
          
    $xml .= utf8_encode($value);
          
    $xml .= '</' utf8_encode($key) . '>';
        }
        
    //$xml .= '</' . utf8_encode($key) . '>';
      
    }
      return 
    $xml;

    Se hai qualche soluzione migliore dimmi pure, intanto ti ringrazio.

    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  7. #7
    potresti inserire dei valori senza chiarvi che lui dovrebbe andare ad inserire come chiavi numeriche in questo modo, se la chiave è SOLO numerica (non penso ti servano tag il cui nome è solo numeri) gli fai inserire direttamente il valore

    come mai hai tolto la codifica UTF8 dai nomi dei tag? tanto non nuoce

    elseif($key=="__solo__")

    lo potresti cambiare in

    elseif(is_numeric($key) === true)

    o meglio ancora

    Codice PHP:
    function generateXMLfromArray($array)
    {
      
    $xml '';
      foreach(
    $array as $key=>$value)
      {
        if (
    is_numeric($key) === true)
        {
          
    $xml .= utf_encode($value)
        }
        else
        {
          
    $xml .= '<' utf8_encode($key) . '>';
          if (
    is_array($value) === true)
          {
            
    $xml .= generateXMLfromArray($value);
          }
          else
          {
            
    $xml .= utf8_encode($value);
          }
          
    $xml .= '</' utf8_encode($key) . '>';
        }
      }
      return 
    $xml;

    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Va benone, nn ci avevo pensato, dove avevo tolto la UTF-8?

    Ti ringrazio
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  9. #9
    Originariamente inviato da Albertorrr
    Va benone, nn ci avevo pensato, dove avevo tolto la UTF-8?

    Ti ringrazio
    scusami, all'inizio quando ho letto il codice ho visto le righe commentate e il mio cervello ha pensato quello e l'ho scritto ... 3 secondi dopo è per davvero partito il cervello e mi son detto "lo devo cancellare" ma ho fatto invia senza cancellare
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.