IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Choix stratégique sur la génération du XML


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 064
    Points
    6 064
    Par défaut Choix stratégique sur la génération du XML
    Bonjour,

    Je me retrouve face à un problème. Dans mon application j'ai besoin de générer du XML. Dans mon cas précis c'est un système récursif. Je vous donne un exemple. J'ai des catégories et une catégorie peut avoir plusieurs sous catégorie et ainsi de suite. Donc si je devais exprimer cela en XML cela pourrait donner un truc de ce genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <root>
        <categorie name="cat 1">
            <categorie name="cat 2"/>
            <categorie name="cat 3"/>
            <categorie name="cat 4">
                <categorie name="cat 5"/>
            </categorie>
        </categorie>
    </root>
    Mon problème c'est que je peux pas utiliser un système récursif avec XMLWriter. En gros, chaque nœud est généré par une méthode d'une classe et cette même méthode s'appelle elle même pour générer le nœud enfant et ainsi de suite. Ceci de manière récursif.
    Problème avec XMLWriter c'est qu'il est pas possible d'ajouter un XML dans un XML.
    Ma question est de savoir s'il est rentable de faire moi même une classe XML ou tout est gérer en string ou je peux régler ce problème concaténation de XML ?

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par berceker united Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <root>
        <categorie name="cat 1">
            <categorie name="cat 2"/>
            <categorie name="cat 3"/>
            <categorie name="cat 4"/>
                <categorie name="cat 5"/>
            </categorie>
        </categorie>
    </root>
    Salut,

    Il y a un "/" (autofermant) de trop a la ligne "cat 4" puisqu'elle a un enfant.

    Sinon il faudrait que ta méthode de classe appelle startElement avant un appel recursif et un endElement après, non ?

  3. #3
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 064
    Points
    6 064
    Par défaut
    Citation Envoyé par yabyab Voir le message
    Salut,

    Il y a un "/" (autofermant) de trop a la ligne "cat 4" puisqu'elle a un enfant.

    Sinon il faudrait que ta méthode de classe appelle startElement avant un appel recursif et un endElement après, non ?
    En effet, je me suis trompé dans le XML mais c'est un exemple en faite.
    En faite avec XMLWriter il concidère toute autre appelle dans un startElement comme étant une chaine de caractère, impossible de récupérer la sortie, c'est à dire qu'il va encoder les balises.
    En gros, je peux pas faire ça grossièrement (en utilisant XMLWriter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function GenerateXML(){
     
        $XMLWr = new XMLWriter();
        ....
       $xmlChild = GenerateXML();
     
        $XMLWr->writeElement("categorie",xmlChild)    
    }
    J'ai pas le code exacte mais en gros ça se génère bien mais pas en XML mais en texte brute convertie.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 63
    Points
    63
    Par défaut
    Oui normal, il ne s'utilise pas de cetta manière.

    Regarde ce code issu de la doc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $oXMLout = new XMLWriter();
    $oXMLout->openMemory();
    $oXMLout->startElement("item");
    $oXMLout->writeElement("quantity", 8);
    $oXMLout->writeElement("price_per_quantity", 110);
    $oXMLout->endElement();
    print $oXMLout->outputMemory();
    qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // produces:
    // <item>
    // <quantity>8</quantity>
    // <price_per_quantity>110</price_per_quantity>
    // </item>
    On imagine donc que ta méthode récursive prendre l'objet $oXMLout en parametre et démarrera les élements avec startElement AVANT appel récursif.

  5. #5
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Pour agrémenter le message de yabyab d'un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
     
    $oXMLout = new XMLWriter();
    $oXMLout->openMemory();
    recusive($oXMLout);
    print $oXMLout->outputMemory();
     
    function recusive($oXMLout,$limit=10) {
     
    	$oXMLout->startElement("item");
    	if ($limit > 0) {
    		recusive($oXMLout,($limit-1));
    	}
    	$oXMLout->endElement();
    }
    ?>
    Ce qui donnera en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <item><item><item><item><item><item><item><item><item><item><item/></item></item></item></item></item></item></item></item></item></item>

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 064
    Points
    6 064
    Par défaut
    En faite il faut que je génère ma récursivité au niveau de l'éléments et non pas sur un bloque XML.
    Donc, en y réfléchissant, je perdre autant de ressource à parcourir mon objet récursivement que de générer moi même mon XML.
    Pour vous expliquer rapidement. Il faut que mon XML ressemble à mon objet qui peut contenir des objets et ainsi de suite.

  7. #7
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    En tout cas il n'y a pas de soucis a utiliser la récursivité avec XMLWriter. Après c'est à toi de voir comment faire le parcours de ton object pour définir ensuite un moyen de créer le xml.

  8. #8
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 064
    Points
    6 064
    Par défaut
    Citation Envoyé par francoisIT Voir le message
    En tout cas il n'y a pas de soucis a utiliser la récursivité avec XMLWriter. Après c'est à toi de voir comment faire le parcours de ton object pour définir ensuite un moyen de créer le xml.
    En effet, d'après vos explication il y a la possibilité de créer en récursivité un XML via XMLWriter. Mais mon risque c'est de créer un truc ou si jamais je tourne la 3 secondes et que je regarde à nouveau mon code, là, je me dis "Qu'est-ce que c'est que ça (voir signature et avatar)".
    Le pire c'est quand un développeur à un trait de génie mais quelques jours plus tard il se dit qu'il en a fumé un bonne

    Merci pour vos intervention

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 63
    Points
    63
    Par défaut
    Je trouve au contraire que la récursivité évite d'avoir un code trop gros et trop complexe, surtout si tu t'appretes à gérer cela avec des strings :s

    Tu dois juste sur le coup te poser quelque seconde sur l'appel récursif pour bien cerner son périmètre, mais la difficulté s'arretera là.

    Avec une petite usine à gaz qui va gérer des strings, en bufferiser certaines pour y réinjecter d'autres strings avant affichage, etc ... cela surement bien plus difficile à reprendre.

Discussions similaires

  1. Problème sur la génération d'un fichier XML
    Par pMolik dans le forum Développement
    Réponses: 7
    Dernier message: 22/11/2010, 19h53
  2. [VB.NET] Pb sur la génération de control dynamique.
    Par bisounux dans le forum ASP.NET
    Réponses: 16
    Dernier message: 19/01/2006, 19h43
  3. Génération de XML
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 06/04/2005, 15h28
  4. [iText] Conseils sur la génération de pdf
    Par GreenJay dans le forum Documents
    Réponses: 6
    Dernier message: 25/03/2005, 01h49
  5. [LOMBOZ]Génération WEB.XML
    Par JWillow dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2004, 23h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo