Page 1 sur 3

Modifier fichier XML

Posté : 29 oct. 2010, 10:56
par Couiin
Bonjour à tous,
Je débute en Php et j'ai des difficultés à modifier un fichier XML.
Je voudrais modifier un ligne en ajoutant des caractères.
J'ouvre mon fichier avec un fopen r+, ensuite avec un while !feof je lis le fichier ligne par ligne avec fgets.
Quand j'arrive à ma ligne voulue, j'utilise un substr_replace pour effectuer la modif et j'écris avec un fwrite.
Mon fichier est bien modifier.
Mon problème :
La mise en forme du fichier n'est plus bonne. En fait le substr_replace a ajouté une ligne mais n'a pas modifié celle selectionnée. Mon fichier se décale.
Je vous poste une partie de mon code.
J'espère avoir été clair.
Merci pour votre aide

Mon code :
// **** Ouverture du fichier en mode mixte, lecture/écriture
$ouvre = fopen("\\\xxxxxxxxxx\\xxxxxxxxx\\EXPORT\\".$NomFich,"r+") or die("Ouverture du fichier impossible");
												
// **** Tant que pas en fin de fichier
while (!feof ($ouvre))
{
     // **** Stockage dans $lecture
     $lecture = fgets($ouvre, 4096);

     // **** Comparaison des chaines
     if(trim($lecture) == trim($comp))
      {

           $Modifs = substr_replace($lecture[$k],$Modif,0);
										
           fwrite($ouvre,$Modifs);

     }
// **** Fermeture du fichier										
fclose($ouvre);								

Re: Modifier fichier XML

Posté : 29 oct. 2010, 11:44
par ouckileou
Quelle est la nature de la modification à apporter ?

Pour modifier/consulter un fichier XML tu as plusieurs API qui serait bien plus souples et sûres à utiliser qu'une lecture ligne à ligne : http://fr.php.net/manual/fr/refs.xml.php

Re: Modifier fichier XML

Posté : 29 oct. 2010, 14:22
par Couiin
Salut ouckileou,

La nature de la modif est à mon sens assez simple.

exemple :
<balise xml> Voici le numéro erroné : 1234 <fin balise xml>
modif pour avoir
<balise xml> Voici le numéro erroné : 1234. Voilà la corection proposée : 4567<fin balise xml>

Je réécris la balise.

Je regarde le lien que tu m'as envoyé.

Merci pour ton aide.

Re: Modifier fichier XML

Posté : 29 oct. 2010, 14:26
par ouckileou
Et comment identifies-tu la balise à modifier ? Recherche sur "erronée" ?

Mais clairement pour modifier du XML tu as les fonctions du DOM qui te permettent facilement de charger ton document, et de mettre à jour le contenu d'un noeud, avec des boucles etc.

De même que pour chercher dans un document XML tu peux utiliser Xpath qui est très rapide.

Peut-être que ça demandera un peu de temps de prise en main (et encore ça reste assez simple et logique) mais autant utiliser les outils adaptés, ton code sera plus lisble, plus facile à être repris et utilisé par quelqu'un d'autre, et même pour toi plus facile à modifier :)

Re: Modifier fichier XML

Posté : 02 nov. 2010, 15:41
par Couin
Salut
Merci pour tes réponses.
J'essaye avec loadXMLDoc().
J'ai vu que cette fonction getElementsByTagName() permettait de rechercher un node dans le fichier XML et je vais essayer de le modifier ensuite avec un replaceData().
En effet, si cela fonctionne c'est bien plus rapide et sacrément efficace !!!

J'avoue ramer un peu dès le début. J'ai une erreur "parse error" avec la fonction loadXMLDoc
Avant je teste l'existence du fichier.

Code : Tout sélectionner

$Way = "\\\xxxxx\\xxxxxx\\xxxxxx\\".$NomFich xmlDoc=loadXMLDoc($Way);
Merci pour ton aide

Re: Modifier fichier XML

Posté : 02 nov. 2010, 16:08
par Couin
Re,
J'utilise des fonctions Javascript, forcément !!! Je ne suis pas malin !!! :?
Ne pas tenir compte du post précédent ....

Re: Modifier fichier XML

Posté : 03 nov. 2010, 09:44
par Couin
Bonjour à tous,
J'ai une erreur qui revient quel que soit la fonction que j'utilise pour ouvrir mon fichier XML .....
Que j'utilise simpleXML_load_file ou xpath avec un load(mon fichier XML) j'ai en retour :

Opening and ending tag mismatch :arrow: ça pointe sur une balise de mon fichier XML
Extra content at the end of the document :arrow: idem

Je ne comprends pas, c'est un problème d'encodage, de structure du fichier XML .... ? Si quelqu'un a une idée.
Merci

Re: Modifier fichier XML

Posté : 03 nov. 2010, 10:51
par stealth35
montre ton xml

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:02
par Couin
Merci pour ta réponse

Voilà mon XML
Je voudrais récupérer le contenu de la balise <Réponse_tiers> pour ensuite la modifier.

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <?xml-stylesheet href="20101011-09283602-decisions.xsl" type="text/xsl"?><HF_DOCUMENT> <Décisions_iris> <IDDécisions_iris>11</IDDécisions_iris> <Numero>xxxxxxxxxx</Numero> <numlot>243</numlot> <Matricule>xxxxxxxxxxx</Matricule> <Num_facture>xxxxxxxxx</Num_facture> <Réponse_tiers>Le numéro de l&apos;établissement prescripteur transmis est : xxxxxxxxx. Veuillez réexaminer la prescription médicale et retransmettre cette facture en corrigeant l&apos;information.</Réponse_tiers> <NOM_agent_traite_lot>xxxxxxxxxxxxxxxxx</NOM_agent_traite_lot> <qui_recycle>PS</qui_recycle> <Consigne_technicien>Le numéro de l&apos;établissement prescriptemur transmis est inconnu de notre fichier Valider le rejet.</Consigne_technicien> <Raison_possible>le numéro de l&apos;établissement prescripteur transmis est inconnu de notre fichier.</Raison_possible> <Num_rejet_signalement>xxxxxxx</Num_rejet_signalement> <libelle_utilisateur_anomalie>Prescripteur établissement inconnu</libelle_utilisateur_anomalie> <Nepastraiter>0</Nepastraiter> <Prendre_motif_invalidation>0</Prendre_motif_invalidation> <date_naissance>xxxxxxx</date_naissance> <Type>xxxxxxxxxxx</Type> <Reférence>xxxxxxxxxxxxxxxx</Reférence> <rej_sig_sel>REJ</rej_sig_sel> <dateheuredecision>xxxxxxxxxxxxxx</dateheuredecision> <num_caisse>xxx</num_caisse> <Centre>xxxx</Centre> <Portefeuille>xxxxx</Portefeuille> <prescripteur>xxxxxxxxxx</prescripteur> </Décisions_iris> </HF_DOCUMENT>

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:09
par ouckileou
Je n'ai aucun soucis à lire ce XML avec simplexml_load_file ici. Pour ma part j'éviterais les caractères accentués dans les noms de balises.

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:13
par stealth35
pas de soucis quand je l'ouvre, le fichier est dans le bon encodage ?

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:30
par Couin
Je l'ouvre comme ça :

Code : Tout sélectionner

$Fich = simplexml_load_file('\\\xxxxxxxxxx\\xxxxxxxxxx\\xxxxxxxxxx\\'.$NomFich);
et en retour j'ai :

Opening and ending tag mismatch: Décisions_iris line 3 and Raison_possible

J'utilise mal la fonction ?

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:34
par stealth35
donc l'encodage n'est pas bon, ton fichier est en utf-8 mais l'entête c'est de l'iso-8859-1

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:38
par Couin
L'encodage n'est pas bon, ok mais vous l'avez ouvert vous ... !
Je ne comprends pas, il faut que j'utilise un utf8_decode ou encode ?

Re: Modifier fichier XML

Posté : 03 nov. 2010, 11:41
par stealth35
L'encodage n'est pas bon, ok mais vous l'avez ouvert vous ... !
Je ne comprends pas, il faut que j'utilise un utf8_decode ou encode ?
ni l'uun ni l'autre sois tu le convertie en utf-8 sois tu met encoding="utf-8"