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] modification fichier xml


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut [XML] modification fichier xml
    bonjour
    j'ai un fichier xml de cette forme par exemple qui se nomme par exemple test.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <note name="" isbool="true">
         <to>Nicolas</to>
         <from>Carla</from>
         <heading>Rappel</heading>
         <body>essai</body>
    </note>
    mon soucis et que parfois le programme ne va m'envoyer que cette partie là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <to>Nicolas</to>
         <from>Carla</from>
         <heading>Rappel</heading>
         <body>essai</body>
    donc la le document n'est plus valide

    ma question est que voudrait rajouter les balises racines avec la version du document en utilisant php mais je suis bloqué

    voici le code dont je travaille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     $this->xmlDOM=new DOMDocument();        
           if($this->valideDoc('test.xml'))
          {
            $this->xmlDOM->Load('test.xml');
         }else{
          $this->xmlDOM->Load($this->addheaderFooter('test.xml'));
          }
            $events=$this->xmlDOM->childNodes->item(0)->childNodes;
    ce que voudrai faire c'est de tester d'abord si le document contient bien le balise racine sinon je le traite avec un autre methode qui rajoute les entetes et la version

    jai trouvé ceci mais je suis bloqué quand je veut rajouter le body c'est à dire le fichier xml manquant (pas de balise racine)
    Ici la methode createElement prend comme parametre un objet alors que moi j'ai string le nom de mon 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
    19
    20
    21
    22
    23
    24
    25
    26
     
    // Instance de la class DomDocument
    $doc = new DOMDocument();
     
    // Definition de la version et l'encodage
    $doc->version = '1.0';
    $doc->encoding = 'ISO-8859-1';
     
    // Ajout d'un commentaire a la racine
    $comment_elt = $doc->createComment('Created By FormatiX.Eu');
    $doc->appendChild($comment_elt);
     
    // Ajout la balise 'note' a la racine
    $note_elt = $doc->createElement('note');
    $doc->appendChild($note_elt);
    $to_elt      = $doc->createElement('to', 'Nicolas');
    // Specifier que les elements to/from/heading/body sont dans 'note'
    $note_elt->appendChild($to_elt);
    // Rendre Joli ;)
    $doc->formatOutput = true;
     
    // Afficher le document XML
    echo $doc->saveXML();
     
    // Sauver le document XML sous le nom simple.xml
    $doc->save('test.xml');
    merci bien pour votre aide

  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
    Document invalide = pas d'arbre.

    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
    <?php
    switch (rand(0, 1)) {
        case 0:
    $xml = <<< EOX
    <to>Nicolas</to>
         <from>Carla</from>
         <heading>Rappel</heading>
         <body>essai</body>
    EOX;
            break;
        case 1:
    $xml = <<< EOX
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <note name="" isbool="true">
         <to>Nicolas</to>
         <from>Carla</from>
         <heading>Rappel</heading>
         <body>essai</body>
    </note>
    EOX;
            break;
    }
     
     
    libxml_use_internal_errors(TRUE);
     
    $dom = new DomDocument;
    //$dom->encoding = 'ISO-8859-1';
    //$dom->preserveWhiteSpace = FALSE;
    if (!$dom->loadXML($xml)) {
        $note = $dom->createElement('note');
        $dom->appendChild($note);
        $note->setAttribute('name', '');
        $note->setAttribute('isbool', 'true');
        $data = $dom->createDocumentFragment();
        $data->appendXML($xml);
        $note->appendChild($data);
    }
     
    $dom->formatOutput = TRUE;
     
    header('Content-type: text/plain');
    echo $dom->saveXML();
    Sur le cas invalide, on arrive à :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0"?>
    <note name="" isbool="true"><to>Nicolas</to>
         <from>Carla</from>
         <heading>Rappel</heading>
         <body>essai</body></note>

  3. #3
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut
    je pense que je suis presque

    voici le code dont je travaille et qui est à peu près la même que donnée dans l'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
    16
    17
    18
    19
    20
    21
    22
     
    libxml_use_internal_errors(TRUE);
     
            //2. Load the XML file into a DOM structure
            $this->xmlDOM=new DOMDocument();
         	$this->xmlDOM->version = '1.0';
    		$this->xmlDOM->encoding = 'ISO-8859-1';
     
           if(!$this->xmlDOM->Load($fileName))
           {
           	$map = $this->xmlDOM->createElement('MAP');
           	$this->xmlDOM->appendChild($map);
           	$map->setAttribute('name', '');
       		$map->setAttribute('isArray', 'true');
       		$data = $this->xmlDOM->createDocumentFragment();
     
    		$data->appendXML($fileName);
        	$map->appendChild($data);
           }
    		$this->xmlDOM->formatOutput = TRUE;
    		header('Content-type: text/plain');
    		echo $this->xmlDOM->saveXML();
    avec le fichier xml normal ça marche , mais avec le fichier xml sans balise racine et son type/version ça me retourne comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <MAP name="" isArray="true">nomdufichierxml.xml</MAP>

    et le fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <MAP name="lenom" isArray="false">
    		<TIMESTAMP name="dateupload">2010-01-02 00:00:02.000</TIMESTAMP>
    		<STR name="a">flv</STR>
    		<STR name="b">file_0.flv</STR>
    		<STR name="c">USA</STR>
    		<UINT32 name="d">0</UINT32>
    		<STR name="e">nmm</STR>
    		<UINT32 name="f">0</UINT32>
    		<BOOL name="g">true</BOOL>
    		<UINT32 name="h">5</UINT32>
    		<DOUBLE name="i">123.500</DOUBLE>
    		<STR name="j">some string...</STR>
        	</MAP>
    le probleme c'est que appendXML affiche le nom du fichier lui même mais pas son contenu

    j'ai essai de traiter le fichier xml comme suit mais sans succes
    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
     
     if(!$this->xmlDOM->Load($fileName))
           {
           	$map = $this->xmlDOM->createElement('MAP');
           	$this->xmlDOM->appendChild($map);
           	$map->setAttribute('name', '');
       		$map->setAttribute('isArray', 'true');
       		$data = $this->xmlDOM->createDocumentFragment();
     
       		$fichier = file($fileName); 
    		$total = count($fichier); 
    		for($i = 0; $i < $total; $i++) 
    		{ 		
    			echo $fichier[$i];
    			$data->appendXML($fichier[$i]);
    		}		
        	$map->appendChild($data);
           }
    m'affiche bien la chose voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <MAP name="lenom" isArray="false">
    		<TIMESTAMP name="dateupload">2010-01-02 00:00:02.000</TIMESTAMP>
    		<STR name="a">flv</STR>
    		<STR name="b">file_0.flv</STR>
    		<STR name="c">USA</STR>
    		<UINT32 name="d">0</UINT32>
    		<STR name="e">nmm</STR>
    		<UINT32 name="f">0</UINT32>
    		<BOOL name="g">true</BOOL>
    		<UINT32 name="h">5</UINT32>
    		<DOUBLE name="i">123.500</DOUBLE>
    		<STR name="j">some string...</STR>
        	</MAP>
    mais si je le met en paramètre dans appendXML il loupe le premier balise <MAP name="lenom" isArray="false"> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <TIMESTAMP name="dateupload">2010-01-02 00:00:02.000</TIMESTAMP>
    		<STR name="a">flv</STR>
    		<STR name="b">file_0.flv</STR>
    		<STR name="c">USA</STR>
    		<UINT32 name="d">0</UINT32>
    		<STR name="e">nmm</STR>
    		<UINT32 name="f">0</UINT32>
    		<BOOL name="g">true</BOOL>
    		<UINT32 name="h">5</UINT32>
    		<DOUBLE name="i">123.500</DOUBLE>
    		<STR name="j">some string...</STR>
    merci

  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
    Pourquoi lire le fichier ligne par ligne ? (file_get_contents ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       		$fichier = file($fileName); 
    		$total = count($fichier); 
    		for($i = 0; $i < $total; $i++) 
    		{ 		
    			echo $fichier[$i];
    			$data->appendXML($fichier[$i]);
    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		$data->appendXML(file_get_contents($fileName));
    Parce qu'avec plus d'une ligne, vous allez n'insérer que la dernière en plus.

    Sinon, je ne vois pas d'erreur mais je n'ai pas tous les éléments pour tester ...

  5. #5
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Par défaut
    merci beaucoup grand JULP
    tu es vraiment génial

    ça marche maintenant avec file_get_contents

    peut être aussi avec readfile() ?
    à tester :-)

  6. #6
    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
    Citation Envoyé par mamyh4 Voir le message
    peut être aussi avec readfile() ?
    Non ! (à moins d'ajouter une bufferisation mais ce serait se compliquer inutilement la tâche)

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

Discussions similaires

  1. Parsing et modification fichier xml
    Par Premium dans le forum Modules
    Réponses: 2
    Dernier message: 02/12/2008, 15h49
  2. Modification fichier XML
    Par pitch21 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 03/11/2008, 08h39
  3. Modification fichier xml
    Par Jasou62114 dans le forum Web
    Réponses: 6
    Dernier message: 23/01/2008, 15h42
  4. War déployé et modifications (fichiers, web.xml)
    Par aravis dans le forum Websphere
    Réponses: 2
    Dernier message: 03/09/2007, 13h31
  5. [VB.NET] modification fichier XML
    Par betaphp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/11/2005, 11h13

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