Bonjour,

J'ai un fichier XML qui se présente sous cette forme :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
<u who="#spk2" start="#d1t8" end="#d1t9">
attends là je me 
<anchor xml:id="a3"/>
 rappelle plus 
<anchor xml:id="a4"/>
 
            </u>
            <event start="#a3" end="#a3"><note type="retranscription-phonetique" xml:lang="fr-sampa">Sm</note></event>
            <event start="#a4" end="#a4"><note type="retranscription-phonetique" xml:lang="fr-sampa">ch</note></event>

je souhaiterai le modifier pour obtenir ce résultat :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
<u who="#spk2" start="#d1t8" end="#d1t9">
attends là je me 
<note type="retranscription-phonetique" xml:lang="fr-sampa">Sm</note>
 rappelle plus 
<note type="retranscription-phonetique" xml:lang="fr-sampa">ch</note>
 
            </u>

je voudrai remplacer les éléments anchor lorsque l'attribut xml:id correspond à celui de l'attribut start dans l'élément event.

Je supprimerai donc les éléments event et replacerai les note à l'emplacement qui était celui de anchor.

Voici le début de code que j'ai réalisé mais je pense qu'il n'est pas très propre :
test.pl

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
open(NEW, 'xml_out2\Lucie1out.xml');
 
while($content = <NEW>)
 
{
	if($content){
	### on repere les ancres
	if($content =~ /(<anchor xml:id="(.*)"\/>)/)
	{
		$ancre = $1;
		$id_ancre = $2;
#		print $id_ancre."\n";
 
	}
	## on repere les event contenant les note de retranscrip phonetique
	if($content =~ /(<event start="#(.*)" end="#(.*)">(<note type="retranscription-phonetique" xml:lang="fr-sampa">.*<\/note>)<\/event>)/)
	{
		$event = $1;
		$id_event = $2;
		$note = $4;
 
		#print $&."\n";
		### si l'id de l'event est = à l'id de l'ancre alors on fait nos changements
		if($id_event = $id_ancre)
	{
		#on remplace l'ancre par la note associée
		$content =~ s/$ancre/$note/g;
		#suppression des éléments event
		$content =~ s/$event/<!-- ancien event -->/g;
		#print $note."\n";
	}
	}
	}
	#on imprime le contenu
	print $content;
 
}
 
close;
je n'arrive pas à remplacer les anchor par la note

merci