source: spip-zone/_plugins_/iterateurs-simplexml/trunk/itersimplexml_fonctions.php @ 70254

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

on y arrivera :-/

  • 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
17// http://www.php.net/manual/pt_BR/book.simplexml.php#108688 (17 mai 2012)
18function xmlObjToArr($obj) {
19    # Cette fonction getDocNamespaces est tres gourmande sur de gros fichiers
20    # $namespace = $obj->getDocNamespaces(true);
21     
22            $namespace[NULL] = NULL;
23     
24            $children = array();
25            $attributes = array();
26            $name = strtolower((string)$obj->getName());
27     
28            $text = trim((string)$obj);
29            if( strlen($text) <= 0 ) {
30                $text = NULL;
31            }
32     
33            // get info for all namespaces
34            if(is_object($obj)) {
35                foreach( $namespace as $ns=>$nsUrl ) {
36                    // atributes
37                    $objAttributes = $obj->attributes($ns, true);
38                    foreach( $objAttributes as $attributeName => $attributeValue ) {
39                        $attribName = strtolower(trim((string)$attributeName));
40                        $attribVal = trim((string)$attributeValue);
41                        if (!empty($ns)) {
42                            $attribName = $ns . ':' . $attribName;
43                        }
44                        $attributes[$attribName] = $attribVal;
45                    }
46     
47                    // children
48                    $objChildren = $obj->children($ns, true);
49                    foreach( $objChildren as $childName=>$child ) {
50                        $childName = strtolower((string)$childName);
51                        if( !empty($ns) ) {
52                            $childName = $ns.':'.$childName;
53                        }
54                        $children[$childName][] = xmlObjToArr($child);
55                    }
56                }
57            }
58     
59            return array(
60                'name'=>$name,
61                'text'=>$text,
62                'attributes'=>$attributes,
63                'children'=>$children
64            );
65        }
66     
67?>
Note: See TracBrowser for help on using the repository browser.