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 :

[XML] Modifier le contenu d'un noeud


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut [XML] Modifier le contenu d'un noeud
    j'ai besoin de l'aide.
    Je veux changer le contenu d'un noeud en utilisant replaceChild.
    Voici mon code :
    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
    function replacingNode($currentNode, $node) 
    { 
       $node->parentNode->replaceChild($currentNode, $node);    
    }    
     
     
    $action 				= $_POST['action']; 
    $updateRecordsArray 	= $_POST['recordsArray']; 
     
    if ($action == "updateRecordsListings"){ 
     
    $i=0; 
     
    foreach ($updateRecordsArray as $recordIDValue) { 
    // Load the XML 
    $dom = new DomDocument; 
    $dom->load("album.xml"); 
     
    //This function replaces $currentNode with $node  
     
    $piece=explode(":",$recordIDValue); 
    	$url=$piece[0]; 
    	$titre=$piece[1]; 
    	$nomFoto=$piece[2]; 
    	$idalbum=$piece[3]; 
    	$idgal=$piece[4]; 
    	$idFoto=$piece[5]; 
    $xml = simplexml_load_file('album.xml'); 	 
    $nodeurl = $xml->xpath("/albums/album[@idAlbum]/galeries/galerie[@idGal]/photos/photo/url/text()"); 
    $oldnode = $nodeurl->item($idFoto); 
     
    $text = $dom->createTextNode($url); 
     
     
    $oldnode->parentNode->replaceChild($text, $oldnode); 
     
     
    $i++; 
    $xmlTmpl = $dom->save("album.xml"); 
     
     
    } 
     
    }
    il m'affiche cet erreur.
    Fatal error: Call to a member function item() on a non-object in Cocuments and SettingsAdministrateurBureauCopie de projet_gallerieupdatexml.php on line 32

    Mon fichier xml est le suivant :

    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
    <albums> 
        <album idAlbum="0"> 
            <nomAlbum>Mode</nomAlbum> 
            <galeries> 
                <galerie idGal="0"> 
    				<dateDeModifAlbum>09-09-18</dateDeModifAlbum> 
    				<nom>gal1</nom> 
    				<legendeAlbum>legende1</legendeAlbum> 
    				    <photos>
    <photo idFoto="0"><dateDeMotif>2009-09-29</dateDeMotif><nomFoto>allo1</nomFoto><url>Mode/photos/ddleop.jpg</url><titre>test3</titre><dateDeCreaFoto>2009-09-29</dateDeCreaFoto></photo>
    <photo idFoto="1"><dateDeMotif>2009-09-30</dateDeMotif><nomFoto>allo2</nomFoto><url>Mode/photos/pageLogin.jpg</url><titre>page1</titre><dateDeCreaFoto>2009-09-30</dateDeCreaFoto></photo>
    <photo idFoto="2"><dateDeMotif>2009-09-30</dateDeMotif><nomFoto>allo3</nomFoto><url>Mode/photos/pageMessages.jpg</url><titre>page2</titre><dateDeCreaFoto>2009-09-30</dateDeCreaFoto></photo>
    <photo idFoto="3"><dateDeMotif>2009-09-30</dateDeMotif><nomFoto>allo4</nomFoto><url>Mode/photos/pqgeBoiteReception.jpg</url><titre>page3</titre><dateDeCreaFoto>2009-09-30</dateDeCreaFoto></photo>
    </photos>	 
                </galerie> 
    </galeries> 
    </album> 
    </albums>

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il y a confusion entre les extensions DOM et SimpleXML que vous utilisez toutes deux (ce qui n'est pas nécessaire) : la méthode item n'existe pas dans l'extension SimpleXML mais bien chez DOM (objet DomNodeList).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = simplexml_load_file('album.xml'); 	 
    $nodeurl = $xml->xpath("/albums/album[@idAlbum]/galeries/galerie[@idGal]/photos/photo/url/text()");

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xpath = new DomXPath($dom);
    $nodeurl = $xpath->query("l'expression XPath");

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    La solution que j'ai trouvé est la suivante.
    elle marche parfaitement.
    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
    $xpath = new DOMXpath($dom);
     
    $nodelist = $xpath->query("/albums/album[@idAlbum='". $idalbum . "']/galeries/galerie[@idGal='" . $idgal . "']/photos/photo/url/text()");
    $nodelegende = $xpath->query("/albums/album[@idAlbum='". $idalbum . "']/galeries/galerie[@idGal='" . $idgal . "']/photos/photo/titre/text()");
    $nodenom = $xpath->query("/albums/album[@idAlbum='". $idalbum . "']/galeries/galerie[@idGal='" . $idgal . "']/photos/photo/nomFoto/text()");
     
    $oldnode = $nodelist->item($i);
    $oldlegende = $nodelegende->item($i);
    $oldnom = $nodenom->item($i);
     
    $text = $dom->createTextNode($url);
    $textlegende = $dom->createTextNode($titre);
    $textnom = $dom->createTextNode($nomFoto);
     
    $oldnode->parentNode->replaceChild($text, $oldnode);
    $oldlegende->parentNode->replaceChild($textlegende, $oldlegende);
    $oldnom->parentNode->replaceChild($textnom, $oldnom);
    Merci pour votre information.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier le contenu d'un noeud XML avec XQuery
    Par Gm7468 dans le forum Débuter
    Réponses: 2
    Dernier message: 12/07/2012, 08h44
  2. Comment modifier le contenu d'un noeud de type texte avec python?
    Par Tinkite82 dans le forum Général Python
    Réponses: 14
    Dernier message: 01/06/2010, 11h58
  3. [SimpleXML] Modifier le contenu d'un noeud
    Par michael_MS dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 16/10/2008, 15h24
  4. [SimpleXML] Modifier le contenu d'un noeud
    Par Scalp4 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/10/2008, 14h59
  5. [DOM XML] Obtenir le contenu de chaque noeud fils1 uniquement
    Par arnoweb dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/11/2006, 14h43

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