Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Inscrit en
    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

  2. #2
    Membre actif
    Homme Profil pro Lionel Chaumeau
    Développeur Web
    Inscrit en
    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 : 195
    Points
    195

    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 :
    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...

  3. #3
    Invité de passage
    Inscrit en
    octobre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 30
    Points : 3
    Points
    3

    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
    Invité de passage
    Inscrit en
    octobre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 30
    Points : 3
    Points
    3

    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •