Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/05/2007, 16h35   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 7
Points : 1
Points : 1
Par défaut [DOM] supprimer un noeud avec une expression xpath

Code :
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 :
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?))
Fab88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 14h30   #2
Invité de passage
 
Inscription : novembre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 7
Points : 1
Points : 1
Code :
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
Citation:
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
Fab88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 12h08   #3
Invité de passage
 
Inscription : novembre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 7
Points : 1
Points : 1
Code :
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 !!
Fab88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 15h57   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
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();
?>
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 11h09   #5
Invité de passage
 
Inscription : novembre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 7
Points : 1
Points : 1
Merci d'avoir répondu !
Et justement en plus ! puisque ca marche !!!
une chose à quoi sert cette ligne :
Code :
$root = $dom->documentElement;
MERCI ENCORE
tes un King
Fab88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 11h45   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
$root = $dom->getElementsByTagName('root')->item(0);


(voir le tableau numéro 54 de la documentation de l'extension DOM).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h03.


 
 
 
 
Partenaires

Hébergement Web