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] suppression d'un noeud qui marche a 1/2


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut [DOM] suppression d'un noeud qui marche a 1/2
    Bonjour,

    grâce a différents topic du forum j'arrive supprimer un noeud de mon xml mais il reste toujours un petit quelque chose après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <root>
      <cat1>
           <titre>mon titre</titre>
       </cat1>
    </root>
    Après suppression du titre j'ai ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <root>
      <cat1>
           </titre>
       </cat1>
    </root>
    Existe t'il un moyen de supprimer tout trace du noeud en question ?

    Merci a tous

  2. #2
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Bonjour,
    Comment t'y prends tu pour suprimer le noeud ?
    En utilisant els fonctions DOM de php, tu ne devrais pas avoir de soucis.
    Z.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut
    Merci Zwiter.

    Pourtant j'utilise les fonction de dom :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    //--------------------------------------------
    // Remove node in XML DOM
    function removeNodeBasedOnXmlPathArray($nodeUniqueName, $nodeRealName, $domPath, $XpathdomXML) {
     
    	$nodeList = executeXpathQuery($domPath . $nodeRealName , $XpathdomXML);
     
    	// node exist
    	if($nodeList != null && $nodeList->length > 0) {
     
    		$targetNode = $nodeList->item(0)->firstChild;		
     
    		if($targetNode != null){
     
    			deleteChildren($targetNode);
    	    	$parentNode = $targetNode->parentNode;
    	    	if($parentNode != null) {
     
    	    		$oldnode = $parentNode->removeChild($targetNode); 	
    	    	}
    		}
    	}
    }
     
    //--------------------------------------------
    // Remove all node's child
    function deleteChildren($node) {
     
        while (isset($node->firstChild)) {
     
            deleteChildren($node->firstChild);
            $node->removeChild($node->firstChild);
        }
    }

    est ce que tu notes un boulette ?

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    pourrais-tu me donner aussi le code interessant qui charge le xml, et appel les fonctions ?
    et la fonction executexpathquery...

  5. #5
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut
    chargement du 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
    22
    23
    24
    25
    26
    27
    28
     
    //--------------------------------------------
    // Return $XpathdomXML
    function getXpathdomXML($file) {
     
    	$domXML;
    	$XpathdomXML;
     
    	if (file_exists($file)) {
     
    		$domXML = new DomDocument();	
     
    		//Remove redundant white space
    		$domXML->preserveWhiteSpace = false;
     
    		//Nicely formats output with indentation and extra space
    		$domXML->formatOutput = true;
     
    		$domXML->load(realpath($file));  	
    		$XpathdomXML = new DOMXPath($domXML);
     
    	}
     
    	return $XpathdomXML;
    }
    ....
     
    $config_XpathdomXML  = getXpathdomXML("monfichierdeconfig.xml");

    pour ce qui est de l'appel des fonction :

    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
     
    ....
    $nodeUniqueName = $GLOBALS['arrayConfigClassName'][2] . //OK
    $GLOBALS['pathSepCharToUniqueNodeNameID'] . $arrayValue["uniquename"]; //OK
     
    $valueInPost = getValueInPOST($nodeUniqueName); //OK
     
    if(isset($valueInPost)){
    	//update or create node
    updateValueBasedOnXmlPathArray($nodeUniqueName, $valueInPost, $nodename, $arrayValue["path"], $config_XpathdomXML);				
    	}
    	else{
    	//delete node					removeNodeBasedOnXmlPathArray($nodeUniqueName, $nodename, $arrayValue["path"], $config_XpathdomXML);
    	}
    ....
    $config_XpathdomXML étant accéder via $GLOBAL car elle est stockée lors de son instanciation


    En clair, si je trouve un ident de noeud dnas mes variables $POST je modifie ou crée le nœud sinon dans mon cas cela veut dire qu'il faut que je supprime le nœud.

    J'espère que cela t'aidera (et moi aussi par la même occasion).

  6. #6
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    vu que je n'ai pas trouver le souci, et qu'il me manquait encore 2-3 trucs que j'ai pas reussi a deviner, voici une version allegée pour suprimer des noeuds.
    Etant donné sa simplicité, je pense que tu pourras facilement la plier a ton dessein.
    Si besoin, tu peux me poser tes questions.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    $string = "<root>
      <cat1>
           <titre>mon titre</titre>
       </cat1>
      <cat2>
           <titre>mon titre</titre>
       </cat2>
    </root>";
     
    $query = "//cat1";
    //$query = "//titre";
     
    $xml = simplexml_load_string($string);
     
    removeNode($xml, $query) or die ("erreur... \n");
     
    echo $xml->asXML();
     
    function rem($node) {
    	$dom=dom_import_simplexml($node);
    	$dom->parentNode->removeChild($dom);
    	}
     
    function removeNode($xml, $path)
    {
    	$result = $xml->xpath($path);
     
    	# for wrong $path
    	if (!isset($result[0])) return false;
     
    	foreach ($result as $r) rem($r);
    	return true;
    }
    ?>

  7. #7
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut
    Merci je regarde tout ça !

Discussions similaires

  1. [DOM] suppression de plusieurs noeuds
    Par yannux dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 09/08/2007, 11h02
  2. [XML] [DOM(XML?)] Suppression d'un noeud XML en php
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/01/2007, 15h11
  3. code de suppression de barre, qui marche ici et pas ailleurs
    Par alassanediakite dans le forum Access
    Réponses: 2
    Dernier message: 03/12/2006, 23h05
  4. [DOM] Suppression d'un noeud
    Par nightf dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 14/11/2006, 22h32
  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