Bon le titre du sujet est peut être pas très clair mais je vais essayer de m'expliquer au mieux.
J'ai besoin de comparer plusieurs fichiers XML, pour repérer les parties redondantes de code, en se basant sur un fichier de référence.
Mes fichiers ressemblent à ça en gros (j'ai pris qu'une petite partie parce qu'ils sont assez volumineux)
Mon code ressemble actuellement à ceci
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 <?xml version="1.0" encoding="ISO-8859-1"?> <preferences> <category name="General"> <category_description>Teamcenter Preferences</category_description> <preference name="AE_dataset_default_keep_limit" type="Integer" array="false" disabled="false"> <preference_description>Default number of versions of Teamcenter datasets to keep before deleting old versions.</preference_description> <context name="Teamcenter"> <value>2</value> </context> </preference> <preference name="ALS_LANG_PROP_DISP_RULES" type="String" array="true" disabled="false"> <preference_description>ALS_LANG_PROP_DISP_RULES</preference_description> <context name="Teamcenter"> <value>type=_ASSEMBLAGE,display=%I-%N,%N=RevMaster._DESCRIPTION_%L</value> <value>type=_ASSEMBLAGE Revision,display=%I-%N/%R,%N=RevMaster._DESCRIPTION_%L</value> <value>type=_PART,display=%I-%N,%N=RevMaster._DESCRIPTION_%L</value> <value>type=_PART Revision,display=%I-%N/%R,%N=RevMaster._DESCRIPTION_%L</value> </context> </preference>
Mes problèmes actuels sont que je n'arrive pas à extraire le contenu des balises <preference_description> et <value> qui peut contenir une valeur simple ou bien plusieurs valeurs définies par type=...
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #!C:\\strawberry\\perl\\bin\\perl -w use strict; use Fcntl; use XML::LibXML; use Data::Dumper; use diagnostics -verbose; sub ParseXMLFile { # Initialisation parsers xml my $xml = XML::LibXML->new(); my $tree = $xml->parse_file($_[0]); # Ouvrir ou créer fichiers de rapport my @fpath = split(m/\./, $_[0]); my $path = "$fpath[0]_Rapport.txt"; open(RAPPORT, ">$path") || die $!; sysopen(RAPPORT, $path, O_WRONLY|O_TRUNC|O_CREAT) || die $!; sysopen(RAPPORT, $path, O_WRONLY|O_TRUNC|O_CREAT, 0666) || die $!; # Début parsing my $root = $tree->getDocumentElement; my @preferences = $root->getElementsByTagName('preference'); foreach my $preference (@preferences) { #Nom préférence print RAPPORT "########\n"; print RAPPORT "Preference:\n", "-Name: ", $preference->getAttribute("name"), "\n", "-Type: ", $preference->getAttribute("type"), "\n", "-Array: ", $preference->getAttribute("array"), "\n", "-Disabled: ", $preference->getAttribute("disabled"), "\n"; # Context my @context = $preference->getElementsByTagName("context"); print RAPPORT "\nContext:\n", "-Name: " ,$context[0]->getAttribute("name"),"\n", "\n-Values","\n"; #"\t-", $context[0]->getElementsByTagName("value")->[0]->getFirstChild->getData , "\n"; # Description #print RAPPORT $preference->getElementsByTagName('preference_description')->[0]->getData, "\n"; print RAPPORT "\n########\n\n\n"; }; print "Rapport effectue \n"; close RAPPORT; }; my $rep = "D:\\Arthur\\xmls\\"; my @files = glob($rep."*.xml"); foreach (@files) { print "\n"; my $path = join("", $rep, $_); if (-f $_) { print $_." existe\n"; if (-r $_) { print $_." lisible\n"; ParseXMLFile($_); } } else { print "Fichier ".$_." non existant\n"; } };
J'ai essayé différentes choses notamment avec getElementsTagByName et getData en essayant de comprendre ce tutoriel
J'ai commencé à apprendre le Perl il y a très peu longtemps, et je ne m'y connais pas trop dans ce genre de langage (le seul que je connais bien est le Lua)
Merci d'avance de m'aider à résoudre ce problème
Partager