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] Conserver la structure avec formatOutput


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Par défaut [DOM] Conserver la structure avec formatOutput
    Bonjour,

    J'ai un fichier XML qui contient déjà des données et lorsque j'en ajoute, je voudrais réutiliser la methode formatOutput de l'object DOMDocument mais rien n'y fait, les noeuds sont ajoutés en vrac à la ligne...

    Voici ma classe :
    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
    45
    46
    47
    48
    <?php
    class user
    {
    	private $xml, $root;
    	private $user_id, $user_pseudo, $user_pwd, $user_name, $user_email, $user_right;
    	private $new_id, $new_pseudo, $new_pwd, $new_name, $new_email, $new_right;
     
    	function __construct()
    	{
     
    		$this->xml = new DOMDocument();
    		$this->xml->formatOutput = true;
    		$this->xml->load('users.xml');
    		$this->root = $this->xml->getElementsByTagName('root_users')->item(0); //element racine
    	}
     
    	private function createNodes()
    	{
    		$new_user 		= $this->root->appendChild($this->xml->createElement('user'));
    		$this->user_id 		= $new_user->appendChild($this->xml->createElement('user_id'));
    		$this->user_pseudo 	= $new_user->appendChild($this->xml->createElement('user_pseudo'));
    		$this->user_pwd		= $new_user->appendChild($this->xml->createElement('user_pwd'));
    		$this->user_name 	= $new_user->appendChild($this->xml->createElement('user_name'));
    		$this->user_email 	= $new_user->appendChild($this->xml->createElement('user_email'));
    		$this->user_right 	= $new_user->appendChild($this->xml->createElement('right_id'));
    	}
     
    	private function addDatas()
    	{
    		$this->new_id 		= $this->user_id->appendChild($this->xml->createTextNode('2'));
    		$this->new_pseudo 	= $this->user_pseudo->appendChild($this->xml->createTextNode('pseudo'));
    		$this->new_pwd	 	= $this->user_pwd->appendChild($this->xml->createTextNode('ede0f9c154d2093e3f48fcafd3c70915'));
    		$this->new_name 	= $this->user_name->appendChild($this->xml->createTextNode('Name'));
    		$this->new_email 	= $this->user_email->appendChild($this->xml->createTextNode('email@domain.tld'));
    		$this->new_right 	= $this->user_right->appendChild($this->xml->createTextNode('1'));
    	}
     
    	function add_user()
    	{
    		$this->createNodes();
    		$this->addDatas();
    		echo $this->xml->saveXML();
    	}
    }
     
    $new_user = new user();
    $new_user->add_user();
    ?>
    Et voici ce que j'obtiens quand j'affiche la source :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <root_users>
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>ede0f9c3a1d20fcafd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tld</user_email>
        <right_id>1</right_id>
      </user>
    <user><user_id>2</user_id><user_pseudo>pseudo</user_pseudo><user_pwd>ede0f9c154d2093e3f48fcafd3c70915</user_pwd><user_name>Name</user_name><user_email>email@domain.tld</user_email><right_id>1</right_id></user></root_users>

    Si quelqu'un connait la solution, j'en serais ravis sachant que je n'ai pas encore commencé à apprendre le XSLT.

    Merci beaucoup.

  2. #2
    Membre expérimenté

    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
    Par défaut
    Et en utilisant la propriété preserveWhiteSpace (avant l'appel à load) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->xml->formatOutput = FALSE;

  3. #3
    Membre averti Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function __construct()
    	{
     
    		$this->xml = new DOMDocument();
    		$this->xml->preserveWhiteSpace = false;
    		$this->xml->formatOutput = true;
    		$this->xml->load('users.xml');
    		$this->root = $this->xml->getElementsByTagName('root_users')->item(0);
    	}
    Yes, ça fonctionne !

    Merci beaucoup !!

    Par contre, je viens de me rendre compte d'une anormalitée : quand j'éxécute plusieurs fois la méthode $new_user->add_user(); j'obtiens ceci dans mon code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    //pour 3 éxécutions :
    <?xml version="1.0" encoding="UTF-8"?>
    <root_users>
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
     
        <right_id>1</right_id>
      </user>
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
     
        <user_email>email@domain.tdl</user_email>
        <right_id>1</right_id>
      </user>
    </root_users>
    <?xml version="1.0" encoding="UTF-8"?>
    <root_users>
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
     
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
        <right_id>1</right_id>
      </user>
      <user>
        <user_id>1</user_id>
     
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
        <right_id>1</right_id>
      </user>
     
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
     
        <right_id>1</right_id>
      </user>
    </root_users>
    <?xml version="1.0" encoding="UTF-8"?>
    <root_users>
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
     
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
        <right_id>1</right_id>
      </user>
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
     
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
        <right_id>1</right_id>
      </user>
      <user>
        <user_id>1</user_id>
     
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
        <right_id>1</right_id>
      </user>
     
      <user>
        <user_id>1</user_id>
        <user_pseudo>pseudo</user_pseudo>
        <user_pwd>root_usersede0f9c3a1d2093e3f48f8546fd3c70915</user_pwd>
        <user_name>Name</user_name>
        <user_email>email@domain.tdl</user_email>
     
        <right_id>1</right_id>
      </user>
    </root_users>

  4. #4
    Membre expérimenté

    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
    Par défaut
    Et comment le sauvegardez/manipulez-vous ce document ?

    Note :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->root = $this->xml->getElementsByTagName('root_users')->item(0);
    Peut être simplifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->root = $this->xml->documentElement;

  5. #5
    Membre averti Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Par défaut
    Ok, merci pour l'optimisation

    Actuellement, je ne sauvegarde pas le fichier, j'affiche juste le résultat en XML de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    echo '<pre>';
    echo $this->xml->saveXML();
    echo '</pre>';
    ?>
    Ou sinon quand je sauvegarde, je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $this->xml->save('monfichierxml.xml');
    ?>
    Ok, jusqu'à présent, je ne sauvegardais pas le fichier XML, j'affichais seulement le résultat et à l'instant, je viens de me rendre compte que le résultat affiché n'est pas du tout celui obtenu que celui de la sauvegarde fichier.

    Donc, mon problème est résolu mais il est tout de même bizarre que l'affichage du XML ne soit pas celui attendu.

    Je vous remercie beaucoup pour votre aide.

    ~jb.

  6. #6
    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
    Par défaut
    Si je puis me permettre un commentaire, ne serait-il pas intéressant de faire une classe dérivée plutôt que d'avoir une propriété $xml dans l'objet ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class User extends DOMDocument

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

Discussions similaires

  1. Drag and drop d'une structure avec virtualtreeview
    Par laudur dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/05/2006, 16h14
  2. [DOM] DOM afficher un input avec du texte dedans
    Par NeHuS dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/01/2006, 22h41
  3. [DOM] Ajouter un bouton avec un nouveau style
    Par Mehdi Feki dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/12/2005, 08h56
  4. [DOM] Cloner un tableau avec DOM
    Par zwck dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/10/2005, 22h26
  5. [JAXB/DOM] Parser Xml : possible avec path reel et non uri !
    Par Jaxofun dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 01/08/2005, 10h04

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