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

Bibliothèques et frameworks PHP Discussion :

[DOM] Modifications de noeuds


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut [DOM] Modifications de noeuds
    Salut,

    voici la structure de mon fichier XML

    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
    17
    18
    19
    20
    21
    <mysql>
      <database name="personnes">
        <table>
            <fiche>
              <var name="id">..</var>
              <var name="nom">...</var>
              <var name="prenom">...</var>
              <var name="statut">...</var>
              <var name="formation">...</var>
              <var name="pageWebPerso" generation="auto"></var>
              <var name="photo"></var>
              <var name="distinctions" generation="none"></var>
              <var name="implicationprojet"><projet>projet1</projet><projet>projet2</projet></var>
              <var name="tel"></var>
              <var name="local"></var>
              <var name="courriel"></var>
              <var name="implicationlabo">5059<laboratoire>..</laboratoire></var>
            </fiche>
        </table>
      </database>
    </mysql>
    mon problémes c'est comment modifier les données dans les balises <projet></projet> sachant que le nombre de ces balises dans le champs <implicationprojet> peut augmenter ou diminuer! et meme chose pour <implicationlabo> , c'est le meme concept.

    et aussi comment modifier le champs generation !!!

    voici le code que j'ai, je vais l'expliquer un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getFicheById($dom, $id)
    {
        $xpath = new DOMXPath($dom);
        $res = $xpath->query(sprintf('//fiche[var[@name = "id"]/text() = "%d"]', $id));
        if ($res->length == 1) {
            return $res->item(0);
        } else {
            return FALSE;
        }
    }
    ca retourne la fiche courante , à partir du id, c'est à dire la fiche a modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ficheToNodeArray($fiche)
    {
        $vars = array();
        foreach ($fiche->firstChild->childNodes as $v) {
            if ($v->tagName == 'var' && $v->hasAttribute('name')) {
                $vars[utf8_decode($v->getAttribute('name'))] = $v;
            }
        }
        return $vars;
    }
    permet la modification des valeurs avec cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $noeuds = ficheToNodeArray($fiche, $_POST['id']);
    	$noeuds['nom']->nodeValue = utf8_encode($_POST['nom']);
    	$noeuds['prenom']->nodeValue = utf8_encode($_POST['prenom']);
    	$noeuds['statut']->nodeValue = utf8_encode($_POST['statut']);
    	$noeuds['formation']->nodeValue = utf8_encode($_POST['formation']);
    	$noeuds['pageWebPerso']->nodeValue = utf8_encode($_POST['pageWebPerso']);
    	$noeuds['tel']->nodeValue = utf8_encode($_POST['tel']);
    	$noeuds['photo']->nodeValue = utf8_encode($_POST['photo']);
    	$noeuds['distinctions']->nodeValue = utf8_encode($_POST['distinctions']);


    finalement, j'ai les valeurs des projets, et des laboratoires dans des array

    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
    17
    18
    19
    20
    21
    22
    $proj=array();
    	$i=0;
    	if(isset($_POST['implicationprojet']))
    	{
    		foreach ($_POST['implicationprojet'] as $v) {
    		   if ($v){
    			 $proj[$i]=$v;
    			 $i++;
    		   }
    		 }
    	}
    	$labs=array();
    	$i=0;
    	if(isset($_POST['implicationlabo']))
    	{
    		foreach ($_POST['implicationlabo'] as $v) {
    		   if ($v){
    			 $proj[$i]=$v;
    			 $i++;
    		   }
    		 }
    	}
    toutes les données proviennent d'un formulaire ...


    Merci.



    ...

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut
    bon ça l'air compliqué

    ok alors je reduit le probleme,

    par exemple ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <var name="pageWebPerso" generation="auto"></var>

    comment je pourrais obtenir la valeur de generation ? c'est à dire une fonction qui me retournera la valeur "auto"

    et comment je pourrais modifier la valeur de generation ??

    si ce probléme est reglé je pourrai faire la modification sans problémes je pense

    merci!



    ...

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    generation étant un attribut et si vous savez à quel élément il se situe vous pouvez vous basez sur la fonction ficheToNodeArray plus haut. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $noeuds = ficheToNodeArray($fiche, $_POST['id']);
    $noeuds['pageWebPerso']->setAttribute('generation', utf8_encode('ma_nouvelle_valeur')); // ça le crée ou modifie sa valeur s'il existe déjà
    Pour implicationlabo/implicationprojet, je n'ai pas compris ce que vous vouliez exactement faire.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut
    Citation Envoyé par julp Voir le message
    generation étant un attribut et si vous savez à quel élément il se situe vous pouvez vous basez sur la fonction ficheToNodeArray plus haut. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $noeuds = ficheToNodeArray($fiche, $_POST['id']);
    $noeuds['pageWebPerso']->setAttribute('generation', utf8_encode('ma_nouvelle_valeur')); // ça le crée ou modifie sa valeur s'il existe déjà
    Pour implicationlabo/implicationprojet, je n'ai pas compris ce que vous vouliez exactement faire.
    merci pour commencer,

    pour implicationprojet et implicationlabo ..

    prenons implicationprojet pour exemple, j'ai le tableau $proj qui contient les projets, ce que je veux, c'est mettre a jour la balise <implicationprojet> pour qu'elle ait les valeurs contenus dans ce tableau

    c'est à dire avoir ca:

    <implicationprojet> <projet>p1</projet> <projet>p2</projet> <projet>p3</projet> </implicationprojet>


    p1,p2,p3 qui proviennent du tableau $proj

    j'espere que c'est clair maintenant


    merci



    ...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Oki, je voyais pas à quoi servait le code que vous donnez (une copie, inutilisée, du tableau) ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $noeuds = ficheToNodeArray($fiche, $_POST['id']);
    if(isset($_POST['implicationprojet'])) {
        foreach ($noeuds['implicationprojet']->childNodes as $child) {
            $child->parentNode->removeChild($child);
        }
        foreach ($_POST['implicationprojet'] as $v) {
            $noeuds['implicationprojet']->appendChild($noeuds['implicationprojet']->ownerDocument->createElement('projet', $v));
        }
    }

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Par défaut
    Citation Envoyé par julp Voir le message
    Oki, je voyais pas à quoi servait le code que vous donnez (une copie, inutilisée, du tableau) ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $noeuds = ficheToNodeArray($fiche, $_POST['id']);
    if(isset($_POST['implicationprojet'])) {
        foreach ($noeuds['implicationprojet']->childNodes as $child) {
            $child->parentNode->removeChild($child);
        }
        foreach ($_POST['implicationprojet'] as $v) {
            $noeuds['implicationprojet']->appendChild($fiche->ownerDocument->createElement('projet', $v));
        }
    }
    oui avec la petite correction que j'ai ajouté au quote


    Merci infiniment!


    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Ajouter un noeud dans un noeud défini
    Par Hombre dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 15/05/2006, 19h48
  2. JTree et modification des noeuds
    Par menuge dans le forum Composants
    Réponses: 2
    Dernier message: 05/05/2006, 08h55
  3. [PHP5][DOM]Supprimer le noeud courant
    Par panpan dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 03/05/2006, 15h01
  4. [DOM] Ajout de noeuds
    Par zevince dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/03/2006, 13h39
  5. [DOM] - Suppression de noeud.
    Par jacquesh dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/02/2006, 11h34

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