begin process at 2012 05 31 04:35:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

PHP5 + XML + DOM, il y a t il un bug ou bien je suis vraiment nul ???


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

PHP5 + XML + DOM, il y a t il un bug ou bien je suis vraiment nul ???

mercredi 1 mars 2006 à 10:31:59 | PHP5 + XML + DOM, il y a t il un bug ou bien je suis vraiment nul ???

izanifu

Bonjour à tous,
Voila je developpe pour mon travail une classe en php5 basé sur DOM pour pouvoir faire des add/mod/del sur un fichier XML.
Comment cela devrait fonctionner :
- pour un add/mod, il faut passer en parametre le chemin du fichier, le xpath pour trouver où faire l'ajout ou la suppression et les données sous forme d'une chaine au format XML
- pour le del, le chemin et le xpath suffisent.
Le mod fonctionne tres bien, ce qui n'est pas le cas du add et du del.

Que ce passe t il :
si je fais l'enregistrement dans un fichier different de mon fichier source, cela fonctionne tres bien.
Le probleme est quand je veux sauvegarder les modifications dans mon fichier source.
Si j'affiche la chaine que je vais enregistrer juste avant de le faire elle est bonne.
Ensuite je fais mon enregistrement, puis je recharge le fichier et je l'affiche, il est bon.
J'en viens au probleme a proprement parler, lorsque j'ouvre avec un editeur (dreamweaver,editplus,wordpad,...) mon fichier mise à jour, cela ne va plus du tout.

Je m'explique :
- dans le cas d'un add, il a fait deux fois l'ajout demandé
- dans le cas d'un del, il l'a fait deux fois aussi.

Cela fait 1 semaine que je me prends la tete la dessus sans pouvoir comprendre quoi que ce soit...

Au secours, à l'aide, SOS, Please help !!!!!

Voici le code source du truc :
/*****DEBUT CLASSE XML *****/
class xml
{
    public function load_file($path) {
        $returnValue=simplexml_load_file($path);

        return $returnValue;
    }
    public function load_chaine($chaine) {
        $returnValue=simplexml_load_string($chaine);

        return $returnValue;
    }
    public function add($path,$xpath,$data) {
        //creation obj DOM
        $doc = new DOMDocument;
        //charge fichier xml d'origine
        $doc->load($path);
        //creation obj DOM xpath
        $doc_xpath = new DOMXPath($doc);
        //recherche par xpath du noeud où ajouter (normalement une seule reponse)
        $entries=$doc_xpath->query($xpath);
        //on selectionne la reponse
        $addme=$entries->item(0);
        $pNode=$addme->parentNode;
        //conversion de la chaine en obj simplexml
        $data=$this->load_chaine($data);
        //conversion de l'obj simplexml en obj DOM
        $data=dom_import_simplexml($data);
        //inclusion de l'obj au document courant
        $data=$doc->importNode($data,true);
        //ajout des donnees
        $pNode->appendChild($data);
        //enregistrement du fichier
          $this->save($path,$doc->saveXML());
    }
    public function mod($path,$xpath,$data) {
        //creation obj DOM
        $doc = new DOMDocument;
        //charge fichier xml d'origine
        $doc->load($path);
        //creation obj DOM xpath
        $doc_xpath = new DOMXPath($doc);
        //recherche par xpath du noeud a modifier (normalement une seule reponse)
        $entries=$doc_xpath->query($xpath);
        //on selectionne la reponse
        $modme=$entries->item(0);
        $pNode=$modme->parentNode;
        //conversion de la chaine en obj simplexml
        $data=$this->load_chaine($data);
        //conversion de l'obj simplexml en obj DOM
        $data=dom_import_simplexml($data);
        //inclusion de l'obj au document courant
        $data=$doc->importNode($data,true);
        //modification des donnees
        $pNode->replaceChild($data, $modme);
        //enregistrement du fichier
          $this->save($path,$doc->saveXML());
    }
    public function del($path,$xpath) {
        //creation obj DOM
        $doc = new DOMDocument;
        //charge fichier xml d'origine
        $doc->load($path);
        //creation obj DOM xpath
        $doc_xpath = new DOMXPath($doc);
        //recherche par xpath du noeud a supprimer (normalement une seule reponse)
        $entries=$doc_xpath->query($xpath);
        //on selectionne la reponse
        $delme=$entries->item(0);
        $pNode=$delme->parentNode;
        //suppression des donnees
        $pNode->removeChild($delme);
        //enregistrement du fichier
          $this->save($path,$doc->saveXML());
        //si cette ligne est presente il ne double pas la supprission mais il fait une erreur      
        //@$pNode->removeChild($delme);
    }
    private function save($path,$str_xml) {
        $fic=fopen($path,"w");
        fwrite($fic,$str_xml);
        fclose($fic);
    }
}
/*****FIN CLASSE XML *****/

/*****DEBUT FICHIER XML *****/
<?xml version="1.0" encoding="iso-8859-1"?>
<MENU>
    <ELEMENT>
        <TYPE>rep</TYPE>
        <ID>accueil</ID>
        <HTML actif="no"/>
        <IMAGE>my_mod.png</IMAGE>
        <IMAGE_OVER>my_mod_over.png</IMAGE_OVER>
        <OPEN_IN/>
        <CONTENT>
            <ELEMENT>
                <TYPE>1</TYPE>
                <ID>accueil_user</ID>
                <HTML actif="no"/>
                <IMAGE>gohome.png</IMAGE>
                <IMAGE_OVER>gohome_over.png</IMAGE_OVER>
                <OPEN_IN>same</OPEN_IN>
                <CONTENT>
                    <PACK>accueil</PACK>
                    <SUBPACK>user</SUBPACK>
                </CONTENT>
            </ELEMENT>
           
           
            <ELEMENT>
                <TYPE>4</TYPE>
                <ID>google</ID>
                <HTML actif="yes">&lt;b&gt;Google&lt;/b&gt;</HTML>
                <IMAGE>myelem.png</IMAGE>
                <IMAGE_OVER>myelem_over.png</IMAGE_OVER>
                <OPEN_IN>new</OPEN_IN>
                <CONTENT>http://www.google.fr/search?client=firefox&amp;hl=fr&amp;q=joelle</CONTENT>
            </ELEMENT>
        </CONTENT>
    </ELEMENT>
    <ELEMENT>
        <TYPE>rep</TYPE>
        <ID>accueil</ID>
        <HTML actif="no"/>
        <IMAGE>my_mod.png</IMAGE>
        <IMAGE_OVER>my_mod_over.png</IMAGE_OVER>
        <OPEN_IN/>
        <CONTENT>
            <ELEMENT>
                <TYPE>rep</TYPE>
                <ID>accueil</ID>
                <HTML actif="no"/>
                <IMAGE>my_mod.png</IMAGE>
                <IMAGE_OVER>my_mod_over.png</IMAGE_OVER>
                <OPEN_IN/>
                <CONTENT/>
            </ELEMENT>
            <ELEMENT>
                <TYPE>rep</TYPE>
                <ID>accueil</ID>
                <HTML actif="no"/>
                <IMAGE>my_mod.png</IMAGE>
                <IMAGE_OVER>my_mod_over.png</IMAGE_OVER>
                <OPEN_IN/>
                <CONTENT>
                    <ELEMENT>
                        <TYPE>url</TYPE>
                        <ID>google</ID>
                        <HTML actif="yes">&lt;b&gt;Google&lt;/b&gt;</HTML>
                        <IMAGE>myelem.png</IMAGE>
                        <IMAGE_OVER>myelem_over.png</IMAGE_OVER>
                        <OPEN_IN>new</OPEN_IN>
                        <CONTENT>http://www.google.fr/search?client=firefox&amp;hl=fr&amp;q=joelle</CONTENT>
                    </ELEMENT>
                </CONTENT>
            </ELEMENT>
        </CONTENT>
    </ELEMENT>
    <ELEMENT>
        <TYPE>rep</TYPE>
        <ID>accueil</ID>
        <HTML actif="no"/>
        <IMAGE>my_mod.png</IMAGE>
        <IMAGE_OVER>my_mod_over.png</IMAGE_OVER>
        <OPEN_IN/>
        <CONTENT>
            <ELEMENT>
                <TYPE>url</TYPE>
                <ID>google</ID>
                <HTML actif="yes">&lt;b&gt;Google&lt;/b&gt;</HTML>
                <IMAGE>myelem.png</IMAGE>
                <IMAGE_OVER>myelem_over.png</IMAGE_OVER>
                <OPEN_IN>new</OPEN_IN>
                <CONTENT>http://www.google.fr/search?client=firefox&amp;hl=fr&amp;q=joelle</CONTENT>
            </ELEMENT>
            <ELEMENT>
                <TYPE>pack</TYPE>
                <ID>accueil_user</ID>
                <HTML actif="no"/>
                <IMAGE>gohome.png</IMAGE>
                <IMAGE_OVER>gohome_over.png</IMAGE_OVER>
                <OPEN_IN>same</OPEN_IN>
                <CONTENT>
                    <PACK>accueil</PACK>
                    <SUBPACK>admin</SUBPACK>
                </CONTENT>
            </ELEMENT>
        </CONTENT>
    </ELEMENT>
    <ELEMENT>
        <TYPE>rep</TYPE>
        <ID>accueil</ID>
        <HTML actif="no"/>
        <IMAGE>my_mod.png</IMAGE>
        <IMAGE_OVER>my_mod_over.png</IMAGE_OVER>
        <OPEN_IN/>
        <CONTENT/>
    </ELEMENT>
</MENU>
/*****FIN FICHIER XML *****/

/*****DEBUT FICHIER TEST *****/
       $xml = new xml();
        $data="\n\t<ELEMENT>\n\t\t<TYPE>rep</TYPE>\n\t\t<ID>joelle</ID>\n\t\t<HTML actif=\"no\"/>\n\t\t<IMAGE>my_mod.png</IMAGE>
            \n\t\t<IMAGE_OVER>my_mod_over.png</IMAGE_OVER>\n\t\t<OPEN_IN/>\n\t\t<CONTENT/>\n\t</ELEMENT>";
        //$xml->add("./../packages/accueil/user/menu_tmp.xml",'/MENU/ELEMENT[1]/CONTENT/ELEMENT',$data);
        //$xml->mod("./../packages/accueil/user/menu_tmp.xml",'/MENU/ELEMENT[1]/CONTENT/ELEMENT[2]',$data);
        $xml->del("./../packages/accueil/user/menu.xml",'/MENU/ELEMENT[1]/CONTENT/ELEMENT[2]');
/*****FIN FICHIER TEST *****/
mercredi 1 mars 2006 à 11:13:41 | Re : PHP5 + XML + DOM, il y a t il un bug ou bien je suis vraiment nul ???

malalam

Administrateur CodeS-SourceS
Hello,

suis désolé mais je viens de tester, et personnellement, ça ne me fait qu'un seul ajout.
Niveau objet, je peux savoir pourquoi tu ne stockes pas le chemin, par exemple ?



Cette discussion est classée dans : mod, doc, xml, png, xpath


Répondre à ce message

Sujets en rapport avec ce message

DOMDocument - personnaliser ? [ par tipat10 ] Bonjour,Je souhaite "personnalier" les fonctions de DOMDocument.J'ai donc créer ma propre classe :class xml extends DOMDocument{    <font face="Couri De doc vers XML, un algo? [ par EricLeRouge ] Bonjour, afin d'exploiter des données d'un documment word, j'aimerai le convertir en XML via php. Existe t il un algo?Je ne connais pas le XML, mais c Utilisation de DOM XML [ par Teclis01 ] Bonjour, Voila j'ai quelques soucis pour utiliser la class DOM XML ... Il ne met pas la balise de fermeture du root du document xml et en plus sans in XML insérer un élément tout au dessus [ par Straw ] Bonjour à tous, je pose cette question dans le cadre de mon mémoire... que je dois rendre dans 12jours Je développe un site flash-xml. Jusque là c Probleme modifier xml ! [ par chanandler ] Bonjour,Jai créé un script pour modifier un fichier xml a un certain endroit mais ca marche pas et je voie pas où est l'erreur pourriez vous m'aider m Utilisation de Xpath [ par anthony428 ] Bonjour à tous, depuis peu, je travaille avec des fichiers xml de grandes tailles, enfin pour moi ce sont des fichiers de grandes tailles. L'ennui es créer un lieu avec un boutton radio [ par namoun ] Bonjour , mon problème est que je voudrais créer un boutton radio et à chaque fois que je clique dessus un document test_doc.doc sera ouvert. j ai tes récupérer le nom d'un élément fils php xml [ par ericdeschamps11 ] bonjour je souhaite récupérer le nom d'un élément fils en fonction de son emplacement dans l'arborescence d'un fichier XML en PHP auriez vous une sol Problème avec installation du module mod_auth_token sur Apache [ par m_abdlmalek ] Bonjour, Nous développons un site en environnement Windows, nous disposons de la configuration suivante : == - php 5.3.4 = Php / XML & DOM [ par Idok ] Bonjour, J'ai un fichier XML de la forme : ... ... ... ... ... </listeAc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales