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 XML] Supprimer noeud XML/PHP 5


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 14
    Points
    14
    Par défaut [DOM XML] 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 : 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
    <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 : 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
    $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

  2. #2
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 262
    Points : 451
    Points
    451
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 daughter, my laptop, my bike and my double-sticks...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    Merci Kalimukti,

    Oué, j'ai confondu attribut et tag pour le coup :p.
    Sa marche niquel, problème résolu !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    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 : 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
    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

Discussions similaires

  1. [JDOM] Supprimer noeud xml
    Par pendoRa dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 06/04/2011, 10h31
  2. supprimer noeud XML
    Par Shatter dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/02/2009, 15h25
  3. [DOM] Modifier un noeud XML
    Par Prosperoh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/10/2008, 17h15
  4. [DOM] Création de noeud XML avec le DOM
    Par BkD35 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/12/2007, 11h09
  5. supprimer noeud XML
    Par rainlily dans le forum ASP.NET
    Réponses: 3
    Dernier message: 24/07/2007, 12h21

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