Bonjour,

J'ai un code qui lit, modifie puis écrit des fichiers xml.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
use XML::Simple;
my $xml=new XML::Simple (KeyAttr=>[]);
 
my $lecturefichier=$xml->XMLin("monfichier.xml",ForceArray => ["declenchement","activite","traitement","modification"], ContentKey=>'texte');
  .... modifs dans $xml ...
my $new_data=$xml->XMLout( $write->{xml},SuppressEmpty=>1,XMLDecl=>"<?xml version='1.0' encodig='UTF-8' standalone='yes'?>", noescape=>1);
 
binmode FILE,":utf8";
print FILE $new_data;
close(FILE);
Fichier en entrée :
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
 
<?xml version='1.0' encodig='UTF-8' standalone='yes'?>
< opt type="regles" write="1">
  <regles_pp>
    <oper mod="xx" val="test" >
       <traitement mod="xx" val="Traitement premier" >
       </traitement>
       <traitement mod="xx" val="Traitement deux" >
            <modification var="modif" val="333.33">
            </modification>
       </traitement>
       <traitement mod="xx" val="Traitement fin" >
       </traitement>
    </oper>
  </regles_pp>
</opt>

A la sortie avec modification de la balise "modification"
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?xml version='1.0' encodig='UTF-8' standalone='yes'?>
< opt type="regles" write="1">
  <regles_pp>
    <oper mod="xx" val="test" >
       <traitement mod="xx" val="Traitement premier" />
       <traitement mod="xx" val="Traitement deux" >
            <modification var="modif" val="443.33" />
       </traitement>
       <traitement mod="xx" val="Traitement fin" />
    </oper>
  </regles_pp>
</opt>

Certaines fins de balise "traitement" ont été modifiées ... :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    <traitement .....>
    </traitement>
sont devenues :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <traitement .... />

La réciproque est vraie aussi.

Ce qui me dérange fortement car je dois effectuer une comparaison entre le fichier d'entrée et celui de sortie et les diffs sont illisibles à cause de ce phénomène.

Y a-t-il un moyen de forcer les fins de balises avec retour à la ligne ? (comme dans le fichier en entrée)

Merci de m'aider car je cherche depuis plusieurs jours et je ne trouve rien ...