Estoy intentando hacer un script que realice ciertas modificaciones en varios XML. Se trata de eliminar ciertas etiquetas que aparecen dentro de la etiqueta <text>. Pero solo necesito eliminarlas cuando aparecen dentro de la etiqueta <text>. He intentado lo siguiente:
Using perl Syntax Highlighting
- opendir IN, 'input';
- my @in = grep {/^[^.]/} readdir IN;
- closedir IN;
- for my $in (@in) {
- open IN, '<', "input/$in" || next;
- open OUT, '>', "output/$in" || die "can't open file output/$in";
- $/ = undef;
- $file = <IN>;
- while ( $file =~ /<text id.*?>(.*?)<\/text>/gsmi ) {
- $text = $1;
- $text =~ s/<name>//g;
- $text =~ s/<\/name>//g;
- $text =~ s/<placeName>//g;
- $text =~ s/<\/placeName>//g;
- $text =~ s/<note n="contraction">(.*?)<\/note>/$1/g;
- }
- print OUT $file;
- close OUT;
- close IN;
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Mi problema es que el resultado que obtengo es el mismo que tenía en el archivo input, es decir, no se aplican las modificaciones que quiero. Si cambio la línea final de "print" por "print OUT $text" sí que se aplican las modificaciones, pero no obtengo todo el archivo input sino sólo la parte de <text>. Resumiendo:
a) puedo imprimir todo el input intacto
b) puedo imprimir la parte de <text> con las modificaciones
¿Cómo puedo imprimir todo el input con las modificaciones?
¡Gracias!