Ignore:
Timestamp:
Oct 6, 2013, 12:03:03 PM (6 years ago)
Author:
eric@…
Message:

Correction du modèle infos_ville.
Utilisation de la nouvelle fonction simplexml_to_array().
Correction de rainette_afficher_direction() : il ne faut pas supprimer la fonction angle2direction() qui est utiliser par certains services.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/rainette/trunk/inc/simplexml_to_array.php

    r70855 r77024  
    11<?php
     2/**
     3 * Ce fichier contient la fonction surchargeable de transformation d'un XML en tableau PHP.
     4 * Cette fonction est une réplication de la fonction homonyme de SPIP. Elle est dupliquée
     5 * dans le plugin car la fonction SPIP n'est disponible qu'à partir de la version 3.0.10.
     6 *
     7 * @package SPIP\BOUSSOLE\Outils\XML
     8 */
     9
    210
    311if (!defined("_ECRIRE_INC_VERSION")) return;
     
    513
    614/**
    7  * Transforme un objet SimpleXML en tableau PHP
     15 * Transformation d'un texte XML ou d'un objet *SimpleXML* en tableau PHP.
    816 *
    9  * @param object $obj
     17 * Si l'argument XML est un texte, il est au préalable converti en objet *SimpleXML*
     18 * par la fonction `simplexml_load_string()`. Ensuite, c'est l'objet *SimpleXML* qui est
     19 * traduit en tableau PHP à partir de la fonction `xmlObjToArr()`.
     20 *
     21 * @uses xmlObjToArr()
     22 * @example
     23 *      ```
     24 * $page = recuperer_page($action);
     25 * $convertir = charger_fonction('simplexml_to_array', 'inc');
     26 * $tableau = $convertir(simplexml_load_string($page), false);
     27 *
     28 * ou
     29 *
     30 * $tableau = $convertir($page, false);
     31 *      ```
     32 *
     33 * @param string|object $xml
     34 *              XML à phraser et à transformer en tableau PHP. Le XML peut être fourni :
     35 *
     36 *              - soit comme une chaine de caractères représentant le texte XML lui-même,
     37 *              - soit comme un objet XML produit à partir du texte par la fonction
     38 *              `simplexml_load_string()` de PHP.
     39 * @param bool $utiliser_namespace
     40 *              Indicateur d'utilisation des namespaces dans le XML. Si aucun namespace n'est
     41 *              utilisé dans le XML, il est préférable de forcer l'argument à `false` afin
     42 *              d'éviter l'appel à la fonction `getDocNamespaces()`.
     43 * @return array
     44 */
     45function inc_simplexml_to_array_dist($xml, $utiliser_namespace=false){
     46        // Décoder la chaine en SimpleXML si pas deja fait
     47        if (is_string($xml))
     48                $xml = simplexml_load_string($xml);
     49        return array('root'=>@xmlObjToArr($xml, $utiliser_namespace));
     50}
     51
     52
     53/**
     54 * Transformation d'un objet *SimpleXML* en tableau PHP.
     55 *
     56 * @autor xaviered at gmail dot com 17-May-2012 07:00
     57 *
     58 * @param object $objet_xml
     59 *              Objet *SimpleXML* à phraser et à transformer en tableau PHP.
     60 * @param bool $utiliser_namespace
     61 *              Indicateur d'utilisation des namespaces dans le XML. Si aucun namespace n'est
     62 *              utilisé dans le XML, il est préférable de forcer l'argument à `false` afin
     63 *              d'éviter l'appel à la fonction getDocNamespaces()`.
    1064 * @return array
    1165**/
    12 // http://www.php.net/manual/pt_BR/book.simplexml.php#108688
    13 // xaviered at gmail dot com 17-May-2012 07:00
    14 function inc_simplexml_to_array($obj, $utiliser_namespace='false') {
     66function xmlObjToArr($objet_xml, $utiliser_namespace=false) {
    1567
    1668        $tableau = array();
     
    1870        // Cette fonction getDocNamespaces() est longue sur de gros xml. On permet donc
    1971        // de l'activer ou pas suivant le contenu supposé du XML
    20         if (is_object($obj)) {
    21                 if ($utiliser_namespace)
    22                         $namespace = $obj->getDocNamespaces(true);
    23                 $namespace[NULL] = NULL;
     72        if (is_object($objet_xml)) {
     73                if (is_array($utiliser_namespace)){
     74                        $namespace = $utiliser_namespace;
     75                }
     76                else {
     77                        if ($utiliser_namespace)
     78                                $namespace = $objet_xml->getDocNamespaces(true);
     79                        $namespace[NULL] = NULL;
     80                }
    2481
    25                 $name = strtolower((string)$obj->getName());
    26                 $text = trim((string)$obj);
     82                $name = strtolower((string)$objet_xml->getName());
     83                $text = trim((string)$objet_xml);
    2784                if (strlen($text) <= 0) {
    2885                        $text = NULL;
     
    3592                foreach( $namespace as $ns=>$nsUrl ) {
    3693                        // attributes
    37                         $objAttributes = $obj->attributes($ns, true);
     94                        $objAttributes = $objet_xml->attributes($ns, true);
    3895                        foreach( $objAttributes as $attributeName => $attributeValue ) {
    3996                                $attribName = strtolower(trim((string)$attributeName));
     
    46103
    47104                        // children
    48                         $objChildren = $obj->children($ns, true);
     105                        $objChildren = $objet_xml->children($ns, true);
    49106                        foreach( $objChildren as $childName=>$child ) {
    50107                                $childName = strtolower((string)$childName);
     
    52109                                        $childName = $ns.':'.$childName;
    53110                                }
    54                                 $children[$childName][] = inc_simplexml_to_array($child);
     111                                $children[$childName][] = xmlObjToArr($child, $namespace);
    55112                        }
    56113                }
     
    58115                $tableau = array(
    59116                        'name'=>$name,
    60                         'text'=>$text,
    61                         'attributes'=>$attributes,
    62                         'children'=>$children
    63117                );
     118                if ($text)
     119                        $tableau['text'] = $text;
     120                if ($attributes)
     121                        $tableau['attributes'] = $attributes;
     122                if ($children)
     123                        $tableau['children'] = $children;
    64124        }
    65125
Note: See TracChangeset for help on using the changeset viewer.