Bonjour,

Je cherche à copier des fichiers XML dans un seule XML en utilisant XML:OM.

j'ai une erreur ds mon script, je pense ds la fonction qui parcour les dossiers.
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
 
use strict;
 use warnings;
 use XML::DOM;
 
 sub importNode($$); # prédéclaration 
 # pour permettre le contrôle du prototype lors de l'appel récursif
 
sub XMLVide{
 
#l encodage du XML 
my $docBut = XML::DOM::Document->new();
$docBut->setXMLDecl($docBut->createXMLDecl("1.0", "UTF-8"));
 
my $racineXml = 'daterecupe';
 
#laracine
 my $racine = $docBut->createElement($racineXml);
$docBut->appendChild($racine);
 
return $docBut;
}#fin consDocXMLVide
 
 
sub importNode($$){ # élément à copier, Document_but
 my ($src, $doc_but) = @_;
 
     my $res;
 
     if( $src->getNodeName() eq '#text' ){
         $res = $doc_but->createTextNode($src->getData());
     }elsif( $src->getNodeName() eq '#comment' ){ # il y en a quelques-uns dans les exemples...
         $res = $doc_but->createComment($src->getData());
     }else{
     # c'est un élément
         $res = $doc_but->createElement($src->getTagName());
         my $attrs = $src->getAttributes();
         my $k = $attrs->getLength();
         for( my $i = 0; $i < $k; $i++ ){
             my $attr = $attrs->item($i);
             $res->setAttribute($attr->getName(), $attr->getValue());
         }
         my @children = $src->getChildNodes();
         foreach my $child ( @children ){
             $res->appendChild(importNode($child, $doc_but));
         }
     }
     return $res;
 }#importNode
 
sub parcoursarborescencefichiers {##Procedure de parcours 
    my ($path, $fichOut, $But, $docBut) = @_;
my $docBut = XMLVide();
    opendir(DIR, $path) or die "can't open $path: $!\n"; #On ouvre le répertoire
 
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
#         print "$file\n"; #les noms des fichiers
	next if $file =~ /^\.\.?$/;
        $file = $path."/".$file; 
 
        if (-d $file) { 
		if($file=~/www.alaswaq.net\/\/([0-9]+)$/){ 
			&parcoursarborescencefichiers($file);
		}
        }
        if (-f $file) { 
#  		if($file =~/(.+)-decoup_XML\.xml/){#pr traiter les fichiers xml seulement
		my $parseur = XML::DOM::Parser->new();
 		my $docSrc = $parseur->parsefile($file);
		print "$docSrc\n";
 
# 		my $docBut = XMLVide();
 		$But = importNode($docSrc->getDocumentElement(), $docBut);
# 		$docBut->appendChild($But);
		print "But : $But\n";
 
#   		open(SORTIE,">:utf8", "VV.xml");
#    		print(SORTIE $docBut->toString());
 
# 		}
	}
print "But2: $But\n";
$docBut->appendChild($copy);
 
  	open(SORTIE,">:utf8", "VV.xml");
   	print(SORTIE $docBut->toString());
 
    }
}
parcoursarborescencefichiers($ARGV[0]); #appel de la fonction de parcour des dossiers
mon dossier contient quelque fichiers XML
il m affiche une msg d'erreur suivant:
XML:OM:OMException(Code=3, Name=HIERARCHY_REQUEST_ERR, Message=document can have only one Element

j'ai réussi avec deux fichiers, en les passant les deux en parametre mais en boucle je n'arrive pas à trouver le problème.

Merci de m'aider.