xml_encode() : le XML facile

Les développeurs PHP vont certainement adorer cette fonction.

Elle permet d’encoder un tableau (à indexes ou pas) de manière efficace. Elle est basée sur un autre code qui ne fonctionnait malheureusement pas très bien.
Les CDATA sont également automatiquement insérés au besoin.
Quand il n’y a pas d’index, les données ressortent sous l’intitulé entry et la racine du document sera toujours entries.

function xml_encode($mixed, $domElement = NULL, $DOMDocument = NULL) {     if (is_null($DOMDocument)) {         $DOMDocument = new DOMDocument;         $DOMDocument->formatOutput = true;   		$rootNode = $DOMDocument->createElement('entries'); 		$DOMDocument->appendChild($rootNode);           xml_encode($mixed, $rootNode, $DOMDocument);           echo @$DOMDocument->saveXML();     } else {         if (is_array($mixed)) {             foreach ($mixed as $index=>$mixedElement) {                 if (is_int($index)) { 					$nodeName = 'entry'; 				} else { 					$nodeName = $index; 				} 				$node = $DOMDocument->createElement($nodeName); 				$domElement->appendChild($node); 				xml_encode($mixedElement, $node, $DOMDocument); 			}         } else { 			// TODO: test if CDATA if needed 			$new_node = $DOMDocument->createTextNode($mixed);               $domElement->appendChild($new_node);         }     } }

On l’utilise comme json_encode().

Par exemple :

<?php   header('Content-Type: text/xml');   function xml_encode($mixed, $domElement = NULL, $DOMDocument = NULL) {     if (is_null($DOMDocument)) {         $DOMDocument = new DOMDocument;         $DOMDocument->formatOutput = true;   		$rootNode = $DOMDocument->createElement('entries'); 		$DOMDocument->appendChild($rootNode);           xml_encode($mixed, $rootNode, $DOMDocument);           echo @$DOMDocument->saveXML();     } else {         if (is_array($mixed)) {             foreach ($mixed as $index=>$mixedElement) {                 if (is_int($index)) { 					$nodeName = 'entry'; 				} else { 					$nodeName = $index; 				} 				$node = $DOMDocument->createElement($nodeName); 				$domElement->appendChild($node); 				xml_encode($mixedElement, $node, $DOMDocument); 			}         } else { 			// TODO: test if CDATA if needed 			$new_node = $DOMDocument->createTextNode($mixed);               $domElement->appendChild($new_node);         }     } }   $entree[0] = "texte";   for ($i = 0;$i < 50;$i++) { 	$entree[$i]['nom'] = "texte pour nom ${i}"; 	$entree[$i]['valeur'] = "texte pour valeur ${i}";   	$donnes['debut'] = 0; 	$donnes['fin'] = 100; 	$entree[$i]['donnees'] = $donnes;   	for ($j = 0;$j < 5;$j++) { 		$liste[$j] = "liste ${j}"; 	}   	$entree[$i]['liste'] = $liste;   	$entree[$i]['xml'] = "donnees avec <a>balise xml</a>"; }   echo xml_encode($entree);   ?>

Affichera :

<?xml version="1.0"?> <entries>   <entry>dexte</entry>   <entry>     <nom>texte pour nom 1</nom>     <valeur>texte pour valeur 1</valeur>     <donnees>       <debut>0</debut>       <fin>100</fin>     </donnees>     <liste>       <entry>liste 0</entry>       <entry>liste 1</entry>       <entry>liste 2</entry>       <entry>liste 3</entry>       <entry>liste 4</entry>     </liste>     <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>   </entry>   <entry>     <nom>texte pour nom 2</nom>     <valeur>texte pour valeur 2</valeur>     <donnees>       <debut>0</debut>       <fin>100</fin>     </donnees>     <liste>       <entry>liste 0</entry>       <entry>liste 1</entry>       <entry>liste 2</entry>       <entry>liste 3</entry>       <entry>liste 4</entry>     </liste>     <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>   </entry>   <entry>     <nom>texte pour nom 3</nom>     <valeur>texte pour valeur 3</valeur>     <donnees>       <debut>0</debut>       <fin>100</fin>     </donnees>     <liste>       <entry>liste 0</entry>       <entry>liste 1</entry>       <entry>liste 2</entry>       <entry>liste 3</entry>       <entry>liste 4</entry>     </liste>     <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>   </entry>   ... </entries>

Et voilà !

Share