source: spip-zone/_plugins_/boussole/trunk/inc/simplexml_to_array.php @ 70346

Last change on this file since 70346 was 70346, checked in by eric@…, 7 years ago

Mise au point de la base de données
Mise au point des modes serveur et client

  • Property svn:eol-style set to native
File size: 1.7 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5
6/**
7 * Transforme un objet SimpleXML en tableau PHP
8 *
9 * @param object $obj
10 * @return array
11**/
12// http://www.php.net/manual/pt_BR/book.simplexml.php#108688
13// xaviered at gmail dot com 17-May-2012 07:00
14function inc_simplexml_to_array_dist($obj, $utiliser_namespace='false') {
15
16        $tableau = array();
17
18        // Cette fonction getDocNamespaces() est longue sur de gros xml. On permet donc
19        // de l'activer ou pas suivant le contenu supposé du XML
20        if ($obj) {
21                if ($utiliser_namespace)
22                        $namespace = $obj->getDocNamespaces(true);
23                $namespace[NULL] = NULL;
24
25                $name = strtolower((string)$obj->getName());
26                $text = trim((string)$obj);
27                if( strlen($text) <= 0 ) {
28                        $text = NULL;
29                }
30
31                $children = array();
32                $attributes = array();
33
34                // get info for all namespaces
35                if (is_object($obj)) {
36                        foreach( $namespace as $ns=>$nsUrl ) {
37                                // atributes
38                                $objAttributes = $obj->attributes($ns, true);
39                                foreach( $objAttributes as $attributeName => $attributeValue ) {
40                                        $attribName = strtolower(trim((string)$attributeName));
41                                        $attribVal = trim((string)$attributeValue);
42                                        if (!empty($ns)) {
43                                                $attribName = $ns . ':' . $attribName;
44                                        }
45                                        $attributes[$attribName] = $attribVal;
46                                }
47
48                                // children
49                                $objChildren = $obj->children($ns, true);
50                                foreach( $objChildren as $childName=>$child ) {
51                                        $childName = strtolower((string)$childName);
52                                        if( !empty($ns) ) {
53                                                $childName = $ns.':'.$childName;
54                                        }
55                                        $children[$childName][] = inc_simplexml_to_array_dist($child);
56                                }
57                        }
58                }
59
60                $tableau = array(
61                        'name'=>$name,
62                        'text'=>$text,
63                        'attributes'=>$attributes,
64                        'children'=>$children
65                );
66        }
67
68        return $tableau;
69}
70
71?>
Note: See TracBrowser for help on using the repository browser.