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

APIs XML Discussion :

[DOM]Modifier un attribut


Sujet :

APIs XML

  1. #1
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut [DOM]Modifier un attribut
    Bonjour,

    J'ai ce fichier xml ci dessous et j'aimerais pourvoir modifier l'attribut de ma balise album donc changer la valeur de nom="name" par nom="Best" par exemple.

    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
    <music>
      <album nom="The album" pochette="Image.jpg">
        <titre nom="name">
          <description>meilleur album</description>
        </titre > 
      </album>  
      <album nom="Moi" pochette="Image2.jpg">  
        <titre nom="aaaa">  
          <description>Le plus mauvais</description>  
        </titre >  
        <titre nom="bbbbbb">  
          <description>Coooll</description>  
        </titre>  
      </album> 
    </music>
    J'ai ce bout de code qui me permet de changer juste un noeud mais j'arrive pas l'adapter pour mon probléme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $doc = new DomDocument; 
    $doc->appendChild($doc->createElement('description',$description));   
    $dom = new DomDocument();
    $dom->load(fichier.xml);
    $xpath = new DOMXpath($dom);
    $nodelist = $xpath->query('//album/photo[@titre ="bbbbbb"]');
    $oldnode = $nodelist->item(0)->getElementsByTagName('description')->item(0);
    $newnode = $dom->importNode($doc->documentElement, true);  
    $oldnode->parentNode->replaceChild($newnode, $oldnode);  
    $dom->save(fichier.xml);
    Merci beaucoup de votre aide.

  2. #2
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    J'avais oublié de mettre un attribut qui me permet de savoir sur quelle noeud travailler donc avec l'attribut pochette ca doit pouvoir marché pour changer l'attribut nom mais je sais pas comment.

    Merci a vous.

  3. #3
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    N'ayant pas de réponse j'aimerais juste savoir si ce que je veux faire est possible ou non ? Car ca va faire 3 jours que j'essai et sans succes merci a vous.

  4. #4
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    On va essayer de t'aider
    L'objectif est d'obtenir un fichier xml dans lequel l'attribut nom name" devient nom="Best"
    Peux tu utiliser pour faire cette transformation xslt?
    si oui on doit pouvoir faire quelques chose
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output 
      		encoding="ISO-8859-15"
      		method="xml"
      		indent="yes" />
     
    	<xsl:template match="node() | @*">
    		<xsl:copy>
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="@nom='name'">
                     <!-- là tu fais ta modif -->>
                        <xsl:attribute name = "nom" >Best</xsl:attribute> 
    	</xsl:template>
    </xsl:stylesheet>

  5. #5
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    En faite je connais pas du tous XLT, je connais plus dom et simpleXML c'est pour cela mais si c'est plus simple avec XLT pourquoi pas même si j'aurais bien voulu trouvé avec DOM.

    Merci a toi

  6. #6
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Merci a vous j'ai fini par trouver comment résoudre mon probléme mais j'aurais une question subsidiaires a vous pauser.
    Pourquoi quand j'utilise un requete simpleXML pour lire mon fichier XML et qu'il voit des caractéres accentué il me renvoie ca a la place du caractére â£. Sachant que jai essayé avec UTF-8 et ISO-8859-1 et aussi utf8_decode() pour la création des balises via DOM.

    Merci de votre aide.

  7. #7
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    et quel est l'encodage de ton retour? je sais qu'en python j'ai eu des soucis car il fallait encoder l'ntrée mais aussi signaler l'encodage de la réponse

  8. #8
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bas en faite comme j'insére mon texte grace a DOM jai lu qu'il encoder directement en UTF-8 et donc c'est pour cela que j'utilise la fonction utf8_decode() car logiquement pour le xml il faut un encodage ISO-8859-1 mais bon pour moi ca marche pas.

    MErci

  9. #9
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Est ce que quelqu'un pourrait me donner un exemple de code qui lui a permis d'écrire du texte accentué dans un fichier xml, bien sur le texte est ajouté dynamiquement via dom ou autre, merci de votre aide car la je sais pas comment arranger mon problème merci a vous.

  10. #10
    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
    La librairie libxml2, à la base de la plupart des extensions PHP (toutes sauf XML/Expat, si je ne m'abuse), utilise en interne l'encodage UTF-8 pour l'arbre DOM. Il me paraît alors plus logique, lorsque vous voulez utilisez les fonctions PHP d'utiliser utf8_encode si vous n'utilisez pas vous-mêmes directement de l'UTF-8. L'encodage d'origine, je suppose, est restauré, par défaut, lors de l'appel à des méthodes comme save(XML). Je signale également que l'extension DOM propose un attribut encoding (modifiable) pour un objet de la classe DomDocument.

  11. #11
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    C'est la le problème car j'utilise utf8_decode() mais ca marche pas donc c'est pour ca que je demandé un exemple concret.

    Merci.

  12. #12
    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
    A aucun moment, vous n'avez pas spécifié les encodages que vous aviez utilisé (fichier XML, script, ...), de là difficile de savoir si votre manière de procéder est correcte ou non.

    Pourquoi vouloir utiliser utf8_decode ? Ne devez-vous pas justement encodé en UTF-8 ?

    Voilà un exemple repris d'une de vos anciennes discussions (j'utilise une configuration full ISO-8859-1 ou assimilée) :

    Le fichier XML original :
    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
    <?xml version="1.0" encoding="iso-8859-1"?>
     
    <music>
      <album nom="The album">
        <titre nom="name">
          <description>meilleur album</description>
        </titre >
      </album>
      <album nom="Moi">
        <titre nom="aaaa">
          <description>Le plus mauvais</description>
        </titre >
        <titre nom="bbbbbb">
          <description>Coooll</description>
        </titre>
      </album>
    </music>
    Le code PHP :
    Code PHP : 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
    define('FICHIER_XML', 'shandler.xml');
     
    $doc = new DomDocument;
    $doc->preserveWhiteSpace = FALSE;
    $doc->formatOutput = TRUE;
    $doc->load(FICHIER_XML);
    $album = $doc->createElement(utf8_encode('çalbumé'));
    $album->setAttribute(utf8_encode('énomà'), utf8_encode('çtesté'));
    $doc->documentElement->appendChild($album);
     
    $titre = $doc->createElement('titre');
    $titre->setAttribute('nom', utf8_encode('un super test avec tout plein de caractères accentués ! On dirait que ça marche !'));
    $album->appendChild($titre);
     
    $description = new DomElement('description', 'album');
    $titre->appendChild($description);
     
    $doc->save(FICHIER_XML);
    Le fichier XML après modification :
    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <music>
      <album nom="The album">
        <titre nom="name">
          <description>meilleur album</description>
        </titre>
      </album>
      <album nom="Moi">
        <titre nom="aaaa">
          <description>Le plus mauvais</description>
        </titre>
        <titre nom="bbbbbb">
          <description>Coooll</description>
        </titre>
      </album>
      <çalbumé énomà="çtesté">
        <titre nom="un super test avec tout plein de caractères accentués ! On dirait que ça marche !">
          <description>album</description>
        </titre>
      </çalbumé>
    </music>

    Ai-je répondu à votre demande ?

  13. #13
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Pour écrire dans le fichier y a pas de probléme moi mon probléme c'est pour l'affichage car il me ressort ca quand je met des accents "marqué !!".

    Sinon moi j'utilise ca pour écrire dans le fichier.

    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
     
    $doc = new DomDocument;
    $doc->preserveWhiteSpace = FALSE;
    $doc->formatOutput = TRUE;
    $doc->load('test.xml');
    $album = $doc->createElement(utf8_encode('album'));
    $album->setAttribute(utf8_encode('nom'), utf8_encode('marqué !!'));
    $album->setAttribute(utf8_encode('photo'), utf8_encode('çtesté.gif'));
    $doc->documentElement->appendChild($album);
     
    $titre = $doc->createElement('titre');
    $titre->setAttribute('nom', utf8_encode('un super test avec tout plein de caractères accentués ! On dirait que ça marche !'));
    $album->appendChild($titre);
     
    $description = new DomElement('description', 'album');
    $titre->appendChild($description);
     
    $doc->save('test.xml');
    Et ca pour lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      //On charge notre fichier xml.
      $xml = simplexml_load_file("test.xml");
     
      foreach($xml->xpath('//album') as $nom_album) 
      {
           echo $nom_album[@nom];
           echo $nom_album[@nom]; 
      }
    Merci de a toi.

  14. #14
    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
    A quoi correspond @nom ?

    Oui, ici, si vous utilisez de l'ISO, vous aurez besoin de utf8_decode :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    echo utf8_decode($nom_album['nom']);
    Et ça ne "suffit" pas, donc ?

  15. #15
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    ok ca marche je savais pas qu'il fallait utiliser utf8_decode() pour l'affichage sinon nom est attribut de la balise album.

    Merci a toi de m'avoir aidé.

Discussions similaires

  1. [DOM] Modifier l'attribut "name" avec IE
    Par tom42 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/09/2007, 18h05
  2. [DOM] DOM - modifier attributs balise IMG
    Par on dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/08/2007, 17h15
  3. modifier un attribut !
    Par stitch dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/04/2006, 14h32
  4. comment modifier les attributs d'un fichier?
    Par kamal101 dans le forum C++
    Réponses: 1
    Dernier message: 18/03/2005, 14h16
  5. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26

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