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] Problème d'indentation/espacement avec un XML [FAQ]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut [DOM] Problème d'indentation/espacement avec un XML
    Bonjour,

    Je modifie un fichier xml avec DOM.

    Mon but est d'ajouter un noeud a la racine <root>.
    Je fais donc ce qu'il y a besoin de faire avec appendChild(), createElement() et createTextNode().

    Seulement voila, quand je sauvegarde mon fichier avec save() il me fait du mono-ligne
    J'ai essayer saveHTMLFile(), ca ne marche pas mieux.

    Est ce qu'il y a moyen de lui faire indenter le code ? Sinon ca sert pas a grand chose cette extension si on peux même pas avoir un XML potable apres.


    Yoshio.

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    L'extension DOM te permet de lire et modifier des fichiers XML, pas de formater le XML pour le rendre lisible par un humain. Ton XML sera lisible par n'importe quele aplication, c'est le principal. Si tu veux avoir du XML indenté, essaie des biblios comme Tidy

    Je rappelle que quoi qu'il en soit, ton XML sera lisible par n'importe quelle application.

  3. #3
    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 777
    Points
    17 777
    Par défaut
    Et les attributs formatOutput (pour l'écriture) et preserveWhiteSpace (pour la lecture) d'un objet DomDocument ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $doc = new DomDocument;
    $doc->formatOutput = TRUE; // Utilisé par les méthodes save* pour formater le document
    $doc->preserveWhiteSpace = FALSE; // Utilisé à la lecture pour ignorer ce formatage et ne pas créer de noeuds texte à partir de ceux-ci
    $doc->load('mon_fichier.xml');
    # ...
    Cela dit le sujet est déjà tombé il y a quelques jours

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Je vient de tester et ca ne marche pas mieux.

    Je veux ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <entry>
        <title>Titre</title>
        <id>id</id>
        <updated>2007</updated>
    </entry>
    et voila comment il me l'ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <entry><id>id:3b918cda56f78aa1996a05a84bc5cb19</id><title>Une autre news de test</title><updated>2007-08-21T11:53:43+02:00</updated></entry>
    Le code on sait jamais :
    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
    	// Load Xml
    	$dom = new DOMDocument();
    	$dom->preserveWhiteSpace = true;
    	$dom->formatOutput = false;
    	$dom->load('public/feed/news.xml');
     
    	// Create element <entry>
    	$entryNode = $dom->createElement('entry');
     
    	// Create element <id>
    	$idNode = $dom->createElement('id');
    	$idNodeText = $dom->createTextNode($id);
    	$idNode->appendChild($idNodeText);
     
    	// Create element <title>
    	$titleNode = $dom->createElement('title');
    	$titleNodeText = $dom->createTextNode($title);
    	$titleNode->appendChild($titleNodeText);
     
    	// Create element <updated>
    	$updatedNode = $dom->createElement('updated');
    	$updatedNodeText = $dom->createTextNode($updated);
    	$updatedNode->appendChild($updatedNodeText);
     
    	// Add node to <entry>
    	$entryNode->appendChild($idNode);
    	$entryNode->appendChild($titleNode);
    	$entryNode->appendChild($updatedNode);
     
    	// Add <entry> to <feed>
    	$feed = $dom->getElementsByTagName('feed')->item(0);
    	$feed->appendChild($entryNode);
     
    	// Save XML to file
    	$dom->save('public/feed/news.xml');
    Je vais regarder pour Tidy.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    formatOutput = TRUE
    Par contre, preservewhitespace ne te sert à rien si tu ne lis pas le doc.

  6. #6
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Toujours pareille, il m'ecrit tout sur la même ligne dans le fichier.

  7. #7
    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 777
    Points
    17 777
    Par défaut
    echo '<pre>' . $dom->saveXML() . '</pre>'; corrobore-t-il ce fait ? Pourrait-on ravoir les premières lignes corrigées (de l'instanciation à l'appel de load) ?

  8. #8
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Avec saveXML c'est pareille, aucun espace ni indentation.

    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
    	// Load Xml
    	$dom = new DOMDocument();
    	$dom->preserveWhiteSpace = true;
    	$dom->formatOutput = true;
    	$dom->load('public/feed/news.xml');
     
    	// Create element <entry>
    	$entryNode = $dom->createElement('entry');
     
    	// Create element <id>
    	$idNode = $dom->createElement('id');
    	$idNodeText = $dom->createTextNode($id);
    	$idNode->appendChild($idNodeText);
     
    	// Create element <title>
    	$titleNode = $dom->createElement('title');
    	$titleNodeText = $dom->createTextNode($title);
    	$titleNode->appendChild($titleNodeText);
     
    	// Create element <updated>
    	$updatedNode = $dom->createElement('updated');
    	$updatedNodeText = $dom->createTextNode($updated);
    	$updatedNode->appendChild($updatedNodeText);
     
    	// Add node to <entry>
    	$entryNode->appendChild($idNode);
    	$entryNode->appendChild($titleNode);
    	$entryNode->appendChild($updatedNode);
     
    	// Add <entry> to <feed>
    	$feed = $dom->getElementsByTagName('feed')->item(0);
    	$feed->appendChild($entryNode);
     
    	// Save XML to file
    	echo '<pre>';
    	var_dump($dom->saveXML());	
    	echo '</pre>';
    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string(353) "
     
    id:0b825253677cc65ea5ab3f90d76eec382007-08-21T12:42:22+02:00id:59fa558e300216817448cb95946bc7b32007-08-21T15:22:00+02:00
    "
    code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <pre>string(353) "<?xml version="1.0"?>
    <feed xmlns="http://www.w3.org/2005/Atom">
    <entry><id>id:0b825253677cc65ea5ab3f90d76eec38</id><title>Une autre news de test</title><updated>2007-08-21T12:42:22+02:00</updated></entry><entry><id>id:59fa558e300216817448cb95946bc7b3</id><title>Une autre news de test</title><updated>2007-08-21T15:22:00+02:00</updated></entry></feed>
    "
    </pre>

  9. #9
    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 777
    Points
    17 777
    Par défaut
    Avec $dom->preserveWhiteSpace = false; ça devrait rentrer dans l'ordre. Les deux à true ne semblent pas faire bon ménage (formatOutput semblant alors être ignoré)

  10. #10
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Ah nikel, merci Julp.

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

Discussions similaires

  1. Pb d'espace avec Commande system
    Par DUBUIS dans le forum C
    Réponses: 7
    Dernier message: 23/06/2006, 13h48
  2. [SQL] Supprimer espace avec .$var.
    Par wolflinger dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/05/2006, 11h03
  3. Pb d'espace avec un TDBEdit ...
    Par Djedjeridoo dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/02/2006, 16h43
  4. Espace avec le bord de la page Web
    Par Palpatine dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/11/2005, 14h25
  5. Gérer les espaces avec SED
    Par byloute dans le forum Linux
    Réponses: 7
    Dernier message: 29/10/2005, 19h07

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