Après avoir testé différents outils de comparaison de fichiers XML, voir le sujet suivant : http://www.developpez.net/forums/sho...d.php?t=125746
j'ai décidé d'utiliser l'outil libre JXyDiff : http://potiron.loria.fr/projects/jxydiff
j'obtiens donc un fichier delta.xml qui récapitule toutes les suppressions, insertions ou mises à jour entre 2 versions d'un fichier XML.
Je souhaite maintenant utiliser ce fichier delta.xml pour rejouer ces mêmes modifications sur d'autres fichier xml (instanciés du fichier xml original)...
Je ne sais pas quel langage utiliser pour réaliser cela. N'ayant pas assez de recul sur tout ce qui se développe autour de XML, je m'adresse à vous pour savoir s'il est possible de gérer ça en utilisant le XSL ou autre technologie lié à XML. Et si pour vous il vaut mieux travailler avec les technos du XML, ou utiliser d'autres langages comme java, ou des langages de script comme javascript...
Bref je rame un peu...
La structure du fichier delta est la suivante :
Du coté du xsl, je bloque un peu sur la manière d'utiliser l'attribut "pos" qui signale la position du noeud dans l'arbre de la manière suivante :
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 <delta> <Deleted update="yes" pos="0:1:15:1:1:0">0</Deleted> <Deleted pos="0:1:13:57"> <KeyValuePair Key="Viewpoint" String=""/> </Deleted> <Deleted pos="0:1:13:55"> <KeyValuePair Key="Timeout Activated" Boolean="false"/> </Deleted> <Deleted update="yes" pos="0:1:11:0">12</Deleted> <Inserted update="yes" pos="0:1:11:0">11</Inserted> <Inserted update="yes" pos="0:1:15:1:1:0">1</Inserted> <AttributeInserted name="Boolean" value="true" pos="0:1:13:45"/> <AttributeInserted name="Integer" value="2" pos="0:1:13:49"/> <AttributeInserted name="String" value="" pos="0:1:13:51"/> <AttributeInserted name="Boolean" value="true" pos="0:1:13:53"/> <AttributeDeleted name="Boolean" pos="0:1:13:49"/> <AttributeDeleted name="Integer" pos="0:1:13:51"/> <AttributeDeleted name="String" pos="0:1:13:53"/> <AttributeUpdated nv="80" name="Height" ov="60" pos="0:1"/> <AttributeUpdated nv="true" name="active" ov="false" pos="0:1"/> <AttributeUpdated nv="150" name="Width" ov="130" pos="0:1"/> <AttributeUpdated nv="365" name="x" ov="380" pos="0:1:1"/> <AttributeUpdated nv="300" name="x" ov="315" pos="0:1:3"/> <AttributeUpdated nv="430" name="x" ov="445" pos="0:1:5"/> <AttributeUpdated nv="430" name="x" ov="445" pos="0:1:7"/> <AttributeUpdated nv="300" name="x" ov="315" pos="0:1:9"/> </delta>
l'élément "elementi" aura alors la positition comme ceci : pos="0:0:0:i" (la position initiale étant 0: )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <root> <elements> <element0/> <element1/> <element2/> ... <elementn/> </elements> </root>
Merci pour vos éclaircissements!![]()
Partager