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

    inserire elemento cdata in xml

    salve,
    per creare un file xml uso SimpleXMLElement come segue:
    codice:
    $xml=new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><DocumentElement></DocumentElement>');
    $user = $xml->addChild('ordini');
    $user->addChild('id_ordine',$id);
    $user->addChild('codice_cliente',$codice_cliente);
    $user->addChild('id_cliente',$id_cliente);
    ........
    $user->addChild('ragione_sociale',$ragione_sociale);
    ........
    a ragione sociale vorrei aggiungere il tag cdata in modo che nell'xml venga così:

    <ragione_sociale><![CDATA[ragione sociale]]</ragione_sociale>

    stò facendo diverse prove ma sicuramente mi sfugge qualcosa.
    Come posso fare?

    grazie.

  2. #2
    Una soluzione potrebbe essere quella di specializzare la classe SimpleXMLElement:

    Codice PHP:
    <?php
    class MySimpleXMLElement extends SimpleXMLElement {

        public function 
    addCData($name$value NULL) {
            
    $child $this->addChild($name);
            if (
    $child !== NULL) {
                
    $node dom_import_simplexml($child);
                
    $ownerDocument $node->ownerDocument;
                
    $node->appendChild($ownerDocument->createCDATASection($value));
            }
            return 
    $child;
        }

    }

    $id 1;
    $codice_cliente 1;
    $id_cliente 1;
    $ragione_sociale "ragione sociale";

    $xml = new MySimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><DocumentElement></DocumentElement>');
    $user $xml->addChild('ordini');
    $user->addChild('id_ordine'$id);
    $user->addChild('codice_cliente'$codice_cliente);
    $user->addChild('id_cliente'$id_cliente);

    $user->addCData('ragione_sociale'$ragione_sociale);

    echo 
    $xml->asXML();
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    ho messo la classe nello stesso file che crea l'xml ma mi va in errore.
    non mi completa lo script.

  4. #4
    E' inutile dire che una cosa va in errore senza specificare il tipo ed il messaggio di errore e, soprattutto, senza postare il codice.
    Il codice che ti ho postato funziona correttamente. Posta il tuo.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    grazie per la pazienza Satifal.

    Il mio problema è che nell'xml il testo con caratteri con l'accento non vengono scritti bene.
    Con il CDATA si risolve il problema??

    di seguito il mio codice che è praticamente identico al tuo:

    codice:
    class MySimpleXMLElement extends SimpleXMLElement {
    
        public function addCData($name, $value = NULL) {
            $child = $this->addChild($name);
            if ($child !== NULL) {
                $node = dom_import_simplexml($child);
                $ownerDocument = $node->ownerDocument;
                $node->appendChild($ownerDocument->createCDATASection($value));
            }
            return $child;
        }
    
    }
    
    
     $user = $xml->addChild('testa_ordini');
     $user->addChild('id_ordine',$row['virtuemart_order_id']);
     $cdate = time($row['created_on']); 
     $user->addChild('cdate',$cdate);
     $user->addChild('codice_cliente',$codice_cliente);
     $user->addChild('id_cliente',$row['virtuemart_user_id']);
     $user->addChild('id_destinazione_cliente',$row['user_info_id']);  
     $user->addChild('tipo_indirizzo_principale',$tipo_indirizzo_principale);
     $user->addChild('codice_destinazione_principale',$codice_destinazione_principale);
     $user->addChild('ragione_sociale_principale',$ragione_sociale_principale);
     $user->addChild('referente_principale',$referente_principale);
     $user->addChild('telefono_principale',$telefono_principale);
     $user->addChild('cellulare_principale',$cellulare_principale);
     $user->addChild('fax_principale',$fax_principale);
     $user->addChild('indirizzo_principale',$indirizzo_principale);
     $user->addChild('comune_principale',$comune_principale);
     $user->addChild('provincia_principale',$provincia_principale);
     $user->addChild('nazione_principale',$nazione_principale);
     $user->addChild('cap_principale',$cap_principale);
     $user->addChild('email_principale',$email_principale);
     $user->addChild('partita_iva_principale',$partita_iva_principale);
     $user->addChild('codice_fiscale_principale',$codice_fiscale_principale);
     $user->addChild('tipo_indirizzo_diverso',$tipo_indirizzo_diverso);
     $user->addChild('codice_destinazione_diverso',$codice_destinazione_diverso);
     $user->addChild('ragione_sociale_diverso',$ragione_sociale_diverso);
     $user->addChild('referente_diverso',$referente_diverso);
     $user->addChild('telefono_diverso',$telefono_diverso);
     $user->addChild('cellulare_diverso',$cellulare_diverso);
     $user->addChild('fax_diverso',$fax_diverso);
     $user->addChild('indirizzo_diverso',$indirizzo_diverso);
     $user->addChild('comune_diverso',$comune_diverso);
     $user->addChild('provincia_diverso',$provincia_diverso);
     $user->addChild('nazione_diverso',$nazione_diverso);
     $user->addChild('cap_diverso',$cap_diverso);
     $user->addChild('email_diverso',$email_diverso);
     $user->addChild('id_venditore',$row['virtuemart_vendor_id']);
     $user->addChild('totale_ordine',$row['order_total']);
     $user->addChild('subtotale_ordine',$row['order_subtotal']); 
     $user->addChild('tasse_su_ordine',$row['order_tax']); 
     $user->addChild('dettaglio_tasse_su_ordine',$row['order_billTax']);
     $user->addChild('spedizione_ordine',$row['order_shipment']);
     $user->addChild('tasse_su_spedizione_ordine',$row['order_shipment_tax']);
     $user->addChild('sconto_coupon',$row['coupon_discount']);
     $user->addChild('codice_coupon',$row['coupon_code']);
     $user->addChild('spese_varie_o_sconto_ordine',$row['order_discount']);
     $user->addChild('valuta',$row['order_currency']);
     $user->addChild('stato_ordine',$row['order_status']);
     $user->addCData('note_cliente',$note);
     }
    $dati_xml = $xml->asXML();

  6. #6
    Se il problema sono i caratteri accentati dovreti lavorare sull'encoding. Inoltre da dove prendi $note? Il problema potrebbe essere a monte.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    con l'encoding ho risolto,
    grazie mille Satifal

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 © 2024 vBulletin Solutions, Inc. All rights reserved.