Changeset 70239 in spip-zone


Ignore:
Timestamp:
Feb 27, 2013, 12:27:04 PM (6 years ago)
Author:
suske@…
Message:

simplexml pour spip2.1 (dans mes rêves au moins)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/iterateurs/iterateur/data.php

    r70210 r70239  
    590590        return $xml_array;
    591591}
     592
     593/**
     594 * xml -> tableau
     595 * @param  string $u
     596 * @return array
     597 * from cerdic et marcimat sur http://contrib.spip.net/Les-Iterateurs-pour-SPIP-2-1#forum457898
     598 */
     599
     600function inc_simplexml_to_array_dist($u){
     601        return array('root'=>@xmlObjToArr(simplexml_load_string($u)));
     602}
     603     
     604    // http://www.php.net/manual/pt_BR/book.simplexml.php#108688 (17 mai 2012)
     605    function xmlObjToArr($obj) {
     606    # Cette fonction getDocNamespaces est tres gourmande sur de gros fichiers
     607    # $namespace = $obj->getDocNamespaces(true);
     608     
     609            $namespace[NULL] = NULL;
     610     
     611            $children = array();
     612            $attributes = array();
     613            $name = strtolower((string)$obj->getName());
     614     
     615            $text = trim((string)$obj);
     616            if( strlen($text) <= 0 ) {
     617                $text = NULL;
     618            }
     619     
     620            // get info for all namespaces
     621            if(is_object($obj)) {
     622                foreach( $namespace as $ns=>$nsUrl ) {
     623                    // atributes
     624                    $objAttributes = $obj->attributes($ns, true);
     625                    foreach( $objAttributes as $attributeName => $attributeValue ) {
     626                        $attribName = strtolower(trim((string)$attributeName));
     627                        $attribVal = trim((string)$attributeValue);
     628                        if (!empty($ns)) {
     629                            $attribName = $ns . ':' . $attribName;
     630                        }
     631                        $attributes[$attribName] = $attribVal;
     632                    }
     633     
     634                    // children
     635                    $objChildren = $obj->children($ns, true);
     636                    foreach( $objChildren as $childName=>$child ) {
     637                        $childName = strtolower((string)$childName);
     638                        if( !empty($ns) ) {
     639                            $childName = $ns.':'.$childName;
     640                        }
     641                        $children[$childName][] = xmlObjToArr($child);
     642                    }
     643                }
     644            }
     645     
     646            return array(
     647                'name'=>$name,
     648                'text'=>$text,
     649                'attributes'=>$attributes,
     650                'children'=>$children
     651            );
     652        }
    592653?>
Note: See TracChangeset for help on using the changeset viewer.