[Cascavel-pm] Liberar Memoria
Nelson Ferraz
nferraz em gmail.com
Sexta Maio 12 16:07:41 PDT 2006
Joenio Marques wrote:
> Existe um XML disponibilizado por terceiros que eu preciso extrair os
> dados dele, sendo XML prefiro utilizar parser ao invés de regex. O
> problema é que quem disponibiliza o XML não o está fazendo direito, o
> XML não é xml bem-formado de acordo com as recomendações. Então
> preciso fazer um pequeno armengue no arquivo xml para enquadra-lo aos
> padroes antes do parser.
Eu tive um problema assim, há poucos dias. O meu problema é que o xml
vinha com html no meio, o que não devia acontecer.
Nestes casos eu precisava trocar "<...>" por "<...>".
Ao invés de fazer uma lista de tags que deveriam ser substituídas, eu
fiz uma lista de tags que eram permitidas -- e todas as outras seriam
corrigidas:
# valid tags
my %is_valid = (
foo,
bar,
baz,
);
# fix xml
$xml =~ s/\<([^>]+)\>/&fix($1)/egs;
sub fix {
my $tag = shift;
my $clean_tag = $tag;
$clean_tag =~ s[\W][]g;
return $is_valid{$clean_tag} ? "<$tag>" : "\<$tag\>";
}
Neste caso, não havia problemas com o tamanho do arquivo; se houvesse,
eu provavelmente trabalharia linha por linha:
while (<>) {
s/\<([^>]+)\>/&fix($1)/eg;
}
Se você não tiver a chance de usar um filtro simples como esse, talvez
possa implementar um iterador.
Espero que esta resposta possa ser útil.
[]s
Nelson
--
Nelson Corrêa de Toledo Ferraz
Segula Technologies (www.segula.fr)
Free Software Foundation Associate Member #3203
Sociedade Perl do Brasil (www.perl.org.br)
Rede Livre de Compartilhamento de Cultura Digital
Mais detalhes sobre a lista de discussão Cascavel-pm