source: spip-zone/_plugins_/iterateurs-demos/trunk/iterateurs-demos_fonctions.php @ 70234

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

Les démos des Itérateurs pour SPIP 2.1, c'est itérateurs-demo, non mais. Vilain forkeur. Je laisse simple_xml comme même na.

  • Property svn:executable set to *
File size: 2.2 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5    /**
6     * xml -> tableau
7     * @param  string $u
8     * @return array
9         * from cerdic et marcimat sur http://contrib.spip.net/Les-Iterateurs-pour-SPIP-2-1#forum457898
10     */
11
12function inc_simplexml_to_array_dist($u){
13        return array('root'=>@xmlObjToArr(simplexml_load_string($u)));
14}
15     
16    // http://www.php.net/manual/pt_BR/book.simplexml.php#108688 (17 mai 2012)
17    function xmlObjToArr($obj) {
18    # Cette fonction getDocNamespaces est tres gourmande sur de gros fichiers
19    # $namespace = $obj->getDocNamespaces(true);
20     
21            $namespace[NULL] = NULL;
22     
23            $children = array();
24            $attributes = array();
25            $name = strtolower((string)$obj->getName());
26     
27            $text = trim((string)$obj);
28            if( strlen($text) <= 0 ) {
29                $text = NULL;
30            }
31     
32            // get info for all namespaces
33            if(is_object($obj)) {
34                foreach( $namespace as $ns=>$nsUrl ) {
35                    // atributes
36                    $objAttributes = $obj->attributes($ns, true);
37                    foreach( $objAttributes as $attributeName => $attributeValue ) {
38                        $attribName = strtolower(trim((string)$attributeName));
39                        $attribVal = trim((string)$attributeValue);
40                        if (!empty($ns)) {
41                            $attribName = $ns . ':' . $attribName;
42                        }
43                        $attributes[$attribName] = $attribVal;
44                    }
45     
46                    // children
47                    $objChildren = $obj->children($ns, true);
48                    foreach( $objChildren as $childName=>$child ) {
49                        $childName = strtolower((string)$childName);
50                        if( !empty($ns) ) {
51                            $childName = $ns.':'.$childName;
52                        }
53                        $children[$childName][] = xmlObjToArr($child);
54                    }
55                }
56            }
57     
58            return array(
59                'name'=>$name,
60                'text'=>$text,
61                'attributes'=>$attributes,
62                'children'=>$children
63            );
64        }
65     
66    ?>
Note: See TracBrowser for help on using the repository browser.