source: spip-zone/_plugins_/iterateurssup/trunk/iterateurssup_fonctions.php @ 70230

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

J'ai mis ça sur ma "ferme" pour mettre facilement "simple_xml" sur les hébergés. Le descriptif attire aussi l'attention sur les plugins pour les Itérateurs (Gdata, iCalendar,...). Je mettrais bien ici un "nécessite" pour entraîner leur chargement auto... Zip dans quelques jours sauf contre-ordre . Les démos c'est du ctrl-c du plugin Itérateurs pour SPIP 2.1. Je ne sais pas comment faire un "symlink SVN"ni si c'est une bonne idée... Du gogogo quoi. A vous lire.

  • 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.