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
je n'arrive pas à remplacer les anchor par la note
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;
merci
Partager