transformer un fichier xml en perl
Bonjour,
J'ai un fichier XML qui se présente sous cette forme :
Code:
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:
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:
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