[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 "&lt;...&gt;".

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>" : "\&lt;$tag\&gt;";
}

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