Não faça XML assim. É ruim juju. XML não é uma estrutura de dados orientada por linha, então o que você está fazendo cria um código frágil.
Os analisadores XML são o caminho a seguir. A maioria das línguas tem. Eu gosto de Perl e XML::Twig
.
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
sub insert_new_post {
my ( $twig, $lang_elt ) = @_;
my $new_item = XML::Twig::Elt->new('item');
#you can probably omit the 'last_child' field, as the RSS readers aren't
#going to care about ordering, probably.
$new_item->insert_new_elt( 'last_child', 'title', "New title" );
$new_item->insert_new_elt( 'last_child', 'link', "http://unix.stackexchange.com" );
$new_item->insert_new_elt( 'last_child', 'guid', "Somenew GUID" );
$new_item->insert_new_elt( 'last_child', 'pubdate', "Today or something" );
$new_item->insert_new_elt( 'last_child', 'description', "Fishy fishy fishy" );
print "Inserting:\n", $new_item->sprint, "\n";
$new_item->paste_after($lang_elt);
}
my $twig = XML::Twig->new(
'pretty_print' => 'indented',
'twig_handlers' => { 'language' => \&insert_new_post },
);
$twig->parsefile ( 'your_file.xml' );
$twig->print; #prints to stdout.