1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| <pre><?php
//tableau exemple
$data = array(
'test' => 'a',
'integer' => 12,
'null' => NULL,
'array' => array(1, 2, 3, 4),
'obj' => (object) array('a' => 56, 'b' => true, 'f' => 1.5)
);
//optention de la liste des clefs
$keys =array_keys($data);
//ajout du tag root si nécessaire
if (count($data) != 1 || $keys[0] == 0) {
$data = array ('xml' => $data);
}
//juste pour voir ce qu'on va convertir
print_r($data);
//fonction de convertion
// ajoute $data à $node dans le document $doc
function addDatasInNodeOfDoc($data, $node, $doc) {
foreach($data as $key => $value) {
//si on a des index numériques
if ('integer' == gettype($key)) {
$key = 'item';
}
//element null
if ('NULL' == gettype($value)) {
$elem = $doc->createElement($key, $value);
//boolean
} elseif ('boolean' == gettype($value)) {
$elem = $doc->createElement($key, $value);
//double ou float
} elseif ('double' == gettype($value)) {
$elem = $doc->createElement($key, $value);
//integer
} elseif ('integer' == gettype($value)) {
$elem = $doc->createElement($key, $value);
//string
} elseif ('string' == gettype($value)) {
$elem = $doc->createElement($key, $value);
//si on a un objet on traite ses membres
} elseif ('object' == gettype($value)) {
$elem = $doc->createElement($key);
addDatasInNodeOfDoc(get_object_vars($value), $elem, $doc);
//si c'est un tableau
} elseif ('array' == gettype($value)) {{
$elem = $doc->createElement($key);
addDatasInNodeOfDoc($value, $elem, $doc);
}
//on accroche le nouvel element au neud
$node->appendChild($elem);
}
return $node;
}
//on crée le document
$doc = new DOMDocument('1.0');
//on ajoute toutes les donnée au document
addDatasInNodeOfDoc($data, $doc, $doc);
//affichage du xml
echo htmlentities($doc->saveXML());
?></pre> |
Partager