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] supprimer un noeud avec une expression xpath


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [DOM] supprimer un noeud avec une expression xpath
    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
     
    		 $dom = new DomDocument();
    		 $dom->load('../../test.xml');
     
    		 $xpath = new DomXpath($dom);
     
    		 $root = $dom->getElementsByTagName('root');
     
     
    		 $query = '//utilisateur[@id="fabrice"]';
     
    		 $next = $xpath->query($query);
     
    		 foreach ($next as $item) 
    			{
    			echo $item->nodeValue . "<br/>";    
    			}
     
    		 $nnext = $next->item(0); 
     
    		 var_dump ($nnext);
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="iso-8859-1"?>
    <root>
    <utilisateur id="fabrice"><login>fabrice</login><pass>ruer</pass><repertoire>aaa</repertoire></utilisateur>
    <utilisateur id="vincent"><login>vincent</login><pass>ruer</pass><repertoire>aaa</repertoire></utilisateur>
    <utilisateur id="damien"><login>damien</login><pass>ruer</pass><repertoire>aaa</repertoire></utilisateur>
    <utilisateur id="julien"><login>julien</login><pass>ruer</pass><repertoire>aaa</repertoire></utilisateur>
    </root>

    Bonjour,
    Je crois que je vais devenir fou, alors pouvez vous m'aider a supprimer par exemple le noeud id fabrice par php DOM + xpath, merci.

    $nnext me renvoit un DOMElement au lieu d'un DOMNode comme dans la doc !
    (comment connaitre les index pour item() de DOMNodeList sans y aller au hazard comme j'ai fait(existe t'il une fonction?))

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    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
    	 $dom = new DomDocument();
    		 $dom->load('../../test.xml');
     
    		 $xpath = new DomXpath($dom);
     
    		 $root = $dom->getElementsByTagName('root')->item(0);
     
    		 $query = '//utilisateur[@id="fabrice"]';
     
    		 $next = $xpath->query($query, $root)->item(0);
     
     
    		 var_dump ($root);
     
    		 var_dump ($next);
     
     
    		  $suppr = $dom->removeChild ($next);
    Je ne comprends pas, quand je fais removeChild ($root) ca marche
    et removeChild ($next) non

    MESSAGE D ERREUR
    Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in C:\Documents and Settings\Michel MAIER\Mes documents\www\TestFab\amfphp\services\testClass.php:68 Stack trace: #0 C:\Documents and Settings\Michel MAIER\Mes documents\www\TestFab\amfphp\services\testClass.php(68): DOMNode->removeChild(Object(DOMElement)) #1 {main} thrown in C:\Documents and Settings\Michel MAIER\Mes documents\www\TestFab\amfphp\services\testClass.php on line 68

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    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
     $dom = new DomDocument();
     
    		 $dom->load('../../test.xml');
     
    		 $xpath = new DomXpath($dom);
     
    		 $root = $dom->getElementsByTagName('root')->item(0);	 
     
    		/* $language1Node = $dom->getElementsByTagName("utilisateur")->item(0);
    		 $firstsiteNode = $language1Node->firstChild;
    		 $language1Node->removeChild($firstsiteNode);
     
    		 */
    		 $query = '//utilisateur[@id="fabrice"]';
     
    		 $language1Node = $xpath->query($query)->item(0);
     
    		 $firstsiteNode = $language1Node->firstChild;
     
    		 $root->removeChild($language1Node);
     
    		 echo 'Ecrit : ' . $dom->save('../../test.xml');
    Toujours la meme erreur, SVPlait de l'aide !!

  4. #4
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    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
    <?php
    header('Content-type: text/plain');
     
    $dom = new DomDocument();
    $dom->preserveWhiteSpace = FALSE;
    $dom->formatOutput = TRUE;
    $dom->load('test.xml');
    $xpath = new DomXpath($dom);
    $root = $dom->documentElement;
    $query = '//utilisateur[@id="fabrice"]';
    $next = $xpath->query($query);
    foreach ($next as $item) 
    {
        $item->parentNode->removeChild($item);
    }
    echo $dom->saveXML();
    ?>

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci d'avoir répondu !
    Et justement en plus ! puisque ca marche !!!
    une chose à quoi sert cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $root = $dom->documentElement;
    MERCI ENCORE
    tes un King

  6. #6
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est l'attribut de la classe DomDocument qui permet de récupérer directement l'élément racine. C'est quand même plus propre que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $root = $dom->getElementsByTagName('root')->item(0);


    (voir le tableau numéro 54 de la documentation de l'extension DOM).

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

Discussions similaires

  1. Supprimer balise <IMG> avec une macro & expression rationnelle
    Par ismael25 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2013, 12h57
  2. [XPATH] [XSLT] tester avec une expression[ok] | Variables ...
    Par pegazuss5 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/11/2010, 14h40
  3. xml:supprimer un noeud avec dom
    Par awalter1 dans le forum Général Python
    Réponses: 1
    Dernier message: 27/10/2010, 15h01
  4. Réponses: 4
    Dernier message: 19/02/2009, 12h19
  5. Réponses: 4
    Dernier message: 01/06/2006, 14h58

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