Bonjour,

je bute depuis 3 jours sur quelque chose qui peut paraître stupide...

Je ne parviens pas à inclure une partie d'un fichier xml dans un autre, je m'explique:

fichier xml1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<titre>
<blabla1></blabla1>
<delimiter></delimiter>
<blabla2></blabla2>
</titre>
fichier xml2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<header>
<exemple>
<variable1>test1</variable1>
</exemple>
<exemple>
<variable2>test2</variable2>
</exemple>
</header>
Or j'aimerais construire le fichier suivant combinant les 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<titre>
<blabla1></blabla1>
<delimiter></delimiter>
<exemple>
<variable1>test1</variable1>
</exemple>
<exemple>
<variable2>test2</variable2>
</exemple>
<blabla2></blabla2>
</titre>
-> c'est à dire reprendre mon xml1 et lui insérer le contenu de xml2 (sans les balises root du xml2).


Voici mon code:
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
# xml1
my $twig = new XML::Twig(pretty_print => 'indented',);
my $XML1 = "/tmp/xml1.xml";
# xml2
my $XML2 = "/tmp/xml2.xml";
#output
my $XML3 = "/tmp/xml3.xml";
 
# ouverture fichier de sortie
open( my $FhXML3, '>', $XML3 )
    or die("Impossible d'ouvrir le fichier $XML3\n$!");
 
# on parse le 1 fichier xml
$twig->parsefile($XML1);
my $root = $twig->root;
 
# second fichier xml
my $twig2 = new XML::Twig(twig_roots => { 'exemple' => '1',}, pretty_print => 'indented',);
$twig2->parsefile($XML2);
 
# traitement
my $root2 = $twig2->root->first_child('exemple');
my $node = XML::Twig::Elt->new( $root2 );
$root2->paste( after => $root->first_child('delimiter') );
 
# ecriture dans fichier
$twig->print($FhXML3);
 
# fermeture fichier
close($FhXML3);

resultat:
Il m'affiche le contenu du xml2 mais avec ses balises root (<header></header>), c'est à dire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<titre>
<blabla1></blabla1>
<delimiter></delimiter>
<header>
<exemple>
<variable1>test1</variable1>
</exemple>
<exemple>
<variable2>test2</variable2>
</exemple>
</header>
<blabla2></blabla2>
</titre>

Voyez-vous comment faire?

J'ai testé de faire des remplacements (avec sub), mais rien n'y fait.


Merci d'avance pour vos réponses.