Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > XML > DOMXML
DOMXML Forum d'entraide pour l'extension DOMXML permettant de manipuler des documents XML en PHP 4 (approche DOM). Avant de poster -> tutoriels DOMXML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/07/2012, 12h02   #1
bobo27110
Invité de passage
 
Inscription : octobre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 30
Points : 3
Points : 3
Par défaut Supprimer noeud XML/PHP 5

Bonjour,

Je voudrais arrivé à supprimer tout ce qui ce passe entre les balises apprenant quand l'id reçu en paramètre correspond à l'id du noeud. Ici j'utilise une variable ($id) fixe pour effectuer les tests.
J'ai vu qu'il existé déjà un poste sur ce sujet : http://www.developpez.net/forums/d27...noeud-xml-php/

Cependant, je n'arrive toujours pas à avoir ce qui cloche !

Voici mon XML :
Code xml :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
	<DS_Apprenant xmlns="">
		<Apprenant diffgr:id="Apprenant1" msdata:rowOrder="0">
			<Id>5126494</Id>
			<Code>0003017</Code>
			<Nom>Test</Nom>
			<Prenom>Teston</Prenom>
			<NomApprenant>Test Teston</NomApprenant>
			<INS_ID>5126495</INS_ID>
			<ENA_NOM>11-12 MFAO</ENA_NOM>
			<Programme>MFAO</Programme>
			<CodeEtat>VAL</CodeEtat>
			<Actif>true</Actif>
			<ENA_ID>5124711</ENA_ID>
			<Login>test.test.11@live</Login>
			<UNC_CODE>ODP41005E-1</UNC_CODE>
			<UNC_DEBUT>2012-03-23T00:00:00+01:00</UNC_DEBUT>
			<GRP_CODE>MS CE 11-12</GRP_CODE>
			<UNC_FIN>2012-07-31T00:00:00+02:00</UNC_FIN>
		</Apprenant>
	</DS_Apprenant>
</diffgr:diffgram>

Et voici mon Script PHP :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$id = "5126494";
$data = new DOMDocument();
$data->load('ListeApprenantUC1.xml');
 
$racine = $data->documentElement;
 
$apprenants = $data->getElementsByTagName('Apprenant');
 
foreach($apprenants as $Apprenant)
{
	if($Apprenant->getAttribute('Id') == '$id')
	{
		$racine->removeChild($Apprenant);
	}
$data->save('ListeApprenantUC1.xml');
}
Je n'ai pas d'erreur, mais mon xml est toujours le même, la suppression ne marche pas!
Quelqu'un à une idée ?
Merci d'avance
bobo27110 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2012, 14h50   #2
kalimukti
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 114
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 114
Points : 214
Points : 214
Citation:
Envoyé par bobo27110 Voir le message
Bonjour,

Je n'ai pas d'erreur, mais mon xml est toujours le même, la suppression ne marche pas!
Quelqu'un à une idée ?
Merci d'avance
Hello Bobo27110,
En fait si, il y a une erreur...
l' "Id" que tu cherches n'est pas un attribut dans ton xml mais un tag. Du coup ta boucle devient un truc du style:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
foreach($apprenants as $Apprenant)
{
        if ($Apprenant->getElementsByTagName('Id')->item(0)->nodeValue==$id)
        {
            try { 
                $old_child = $Apprenant->parentNode->removeChild($Apprenant);
            }
            catch (DOMException $e) {
                echo $e->getMessage();
            } 
        }
}
 
$data->save('ListeApprenantUC1.xml');
J'espère que ça peut t'aider
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/07/2012, 15h02   #3
bobo27110
Invité de passage
 
Inscription : octobre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 30
Points : 3
Points : 3
Merci Kalimukti,

Oué, j'ai confondu attribut et tag pour le coup :p.
Sa marche niquel, problème résolu !
bobo27110 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2012, 15h49   #4
bobo27110
Invité de passage
 
Inscription : octobre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 30
Points : 3
Points : 3
Bon, j'ai un autre problème, mais dans le même genre, donc je me suis dit, pourquoi en refaire un nouveau alors que je peux poster à la suite de celui-ci :p.

Voilà, en gros je veux supprimer un bloc <Apprenant> de mon XML si sont "courseid" = 0. Mais sa ne marche pas la!

Code :
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
36
37
38
39
40
41
42
43
44
 
///Chargement du XML pour travailler avec les données
$xml= simpleXML_load_file('ListeApprenantUC2.xml');
 
foreach($xml->DS_Apprenant->children() as $apprenant)
{        
	//Récupération du courseid par requête
	$stmt = $bdd->prepare('select id from mdl_course where idnumber = :idnumber');
	if (!$stmt->execute(array('idnumber' => $apprenant->UNC_CODE)))
	throw new RuntimeException('Query error');
 
	$courseid = (int)$stmt->fetchColumn(); 
 
if($courseid==0){
///////////Requete de récuération des id Course//////////////////////
$req1 = $bdd->prepare('select idnumber from mdl_course where id = '.$courseid.'');
$req1->execute();
$resultat = $req1->fetchall();
 
////////////Si Cours non déployé, on Supprime les informations du XML//////////
$data = new DOMDocument();
$data->load('ListeApprenantUC2.xml');
 
$racine = $data->documentElement;
 
$apprenants = $data->getElementsByTagName('Apprenant');
 
foreach ($resultat as $valeur)
{
	foreach($apprenants as $Apprenant)
	{
		if ($Apprenant->getElementsByTagName('UNC_CODE')->item(0)->nodeValue!=$valeur["idnumber"])
			{
				try { 
					$old_child = $Apprenant->parentNode->removeChild($Apprenant);
				}
				catch (DOMException $e) {
					echo $e->getMessage();
				} 
			}
	}
	$data->save('ListeApprenantUC2.xml');
}
}
Une idée? merci d'avance
bobo27110 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h18.


 
 
 
 
Partenaires

Hébergement Web