Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1520 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Supprimer un élément XML en ayant son ID

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer un élément XML en ayant son ID

n°1994807
clements42
Posté le 20-05-2010 à 16:22:24  profilanswer
 

Pour le problème actuel, voir post 5.  :hello:  
 
bonjour, je ne suis pas un spécialiste en php, mais souhaiterais avoir de l'aide :
 
j'ai un fichier XML qui ressemble à ça :
 
<playlist version="1" xmlns="http://xspf.org/ns/0/">
   <trackList>
 
       <track>
           <location> test1.mp3</location>
           <title> La Moldau (Vltava)</title>
       </track>
         
       <track>
           <location>test2.mp3</location>
           <creator> Antonin Dvorak</creator
       </track>
 
          ...
 
   </trackList>
<playlist>
 
Je cherche à pouvoir insérer de nouveaux éléments <track>, de préférence au début (ligne 3 donc), avec un script php.
 
Comment faire pour pouvoir insérer du texte à cet endroit ? En gros, j'aimerais pouvoir naviguer dans le fichier, afin de pouvoir écrire là où je veux.
J'ai l'impression que les fichiers txt sont assez peu maniables en php.  :(  Où alors est-ce plus compliqué.
 
Merci à ceux qui m'apporteront des pistes.  :hello:


Message édité par clements42 le 21-05-2010 à 01:38:35
mood
Publicité
Posté le 20-05-2010 à 16:22:24  profilanswer
 

n°1994811
PierreC
Posté le 20-05-2010 à 16:27:36  profilanswer
 
n°1994814
Paulp
~, sweet ~
Posté le 20-05-2010 à 16:31:28  profilanswer
 

Tu peux manipuler le XML via le DOM
http://www.php.net/manual/fr/class.domdocument.php
 

Code :
  1. $document = DOMDocument::loadXML($xml);
  2. $trackList = $document->getElementsByTagName('trackList')->item(0);
  3. $track = $document->createElement('track');
  4. $track->appendChild($document->createElement('location','mp3/test2.mp3'));
  5. $track->appendChild($document->createElement('creator','Antonin Dvorak'));
  6. $trackList->insertBefore($track, $trackList->firstChild);
  7. echo $document->saveXML();


 
EDIT : Simple XML est plus simple, comme son nom l'indique, mais je ne sais pas si tu peux spécifier d'ajouter au début
EDIT2 : Bien sur, il faut rajouter toute une gestion d'erreur (flux mal formé, ...)


Message édité par Paulp le 20-05-2010 à 16:34:56
n°1994817
clements42
Posté le 20-05-2010 à 16:41:43  profilanswer
 

Merci, nickel.

n°1994947
clements42
Posté le 21-05-2010 à 01:35:55  profilanswer
 

j'aurais à nouveau besoin d'aide...
 
Je souhaite supprimer l'élément <track> dont l'id est contenu dans une variable.
 

Code :
  1. <trackList>
  2.         <track id="XXXX">
  3.             <location> test1.mp3</location>
  4.             <title> La Moldau (Vltava)</title>
  5.         </track>
  6.        
  7.         <track id="YYYY">
  8.             <location>test2.mp3</location>
  9.             <creator> Antonin Dvorak</creator
  10.         </track>           ...
  11.     </trackList>


 
Pour pouvoir le supprimer avec removeChild(), je dois le récupérer. Or je n'y arrive pas. J'ai essayé avec getElementById(), ainsi qu'avec getElementsByTagName(). Mais rien à faire.
 
Pour utiliser getElementById(), apparement il spécifier quel champ est l'id avec setIdAttribute(), j'ai essayé de le faire en prenant n'importe quel <track>, appliquer cette méthode, et réutiliser getElementById() avec le contenu de ma variable.

Code :
  1. $doc = new DOMDocument();
  2.     $doc->load("playlist.xml" );
  3.        
  4.     $trackList = $doc->getElementsByTagName('trackList')->item(0);
  5.     $track = $trackList->getElementsByTagName('track')->item(0);
  6.     $track->setIdAttribute('id',TRUE);
  7.     echo $track->getAttribute('id'); // m'affiche bien son id
  8.     $track = $trackList->getElementById('01 - Delivrance.mp3'); // Fatal error: Call to undefined method DOMElement::getElementById() in C:\wamp\www\bidouille\page.php on line 114


 
Merci d'avance...
 

n°1995537
Paulp
~, sweet ~
Posté le 24-05-2010 à 11:39:39  profilanswer
 

Tu peux utiliser le XPath sinon

Code :
  1. $xpath = new DOMXPath($doc);
  2. $trackList->removeChild($xpath->query("track[id='XYZ']",$trackList)->item(0));

n°1995609
clements42
Posté le 24-05-2010 à 17:38:44  profilanswer
 

je vois de voir ton message, mais en fait j'ai trouvé la solution seul, en utilisant un foreach :
 

Code :
  1. $doc = new DOMDocument();
  2. $doc->load("playlist.xml" );        
  3. $trackList = $doc->getElementsByTagName('trackList')->item(0);
  4. foreach ($trackList->getElementsByTagName('track') as $track) {
  5.      if ($track->getAttribute('id') == ($ma_variable) {
  6.           $aSupprimer=$track;
  7.           $trackList->removeChild($aSupprimer);
  8.      }
  9. }


Message édité par clements42 le 24-05-2010 à 17:39:48

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Supprimer un élément XML en ayant son ID

 

Sujets relatifs
[Cocoa] Parsing XML iphoneparcourir une chaine XML. urgent
Supprimer une "colone" dans un tableausupprimer caractère dans nom de fichier
creer un fichier XML[Flash + AS] supprimer des duplicateMovieClip
[batch] Supprimer un fichier par rapport à la dateChanger l'emplacement du fichier XML
Vba supprimer plusieurs lignes if then end ifLire fichier avec XML
Plus de sujets relatifs à : Supprimer un élément XML en ayant son ID


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR