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)
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>
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
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";
	}		
};
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=...
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