Conviertiendo caracteres Html

Oscar de Anda oscar en jornada.com.mx
Mar Dic 19 02:59:28 CET 2006


Gracias Chema, te explico brevemente.....

Estamos realizando un programa que genera un Xml basado en el estándar 
Nitf (nitf.org) a partir de un archivo que se exporta desde InDesign, un 
archivo con un formato similar pero muy complejo al Xml.

Para la unidad de pruebas, generamos un par de archivos tal y como se 
supone que los debería de generar , los parseamos con miniDom y los 
comparamos con cada uno de los valores que retornan las funciones del 
programa.

El problema que tenemos es que miniDom convierte la entidad en el 
caracter mientras que las funciones del programa regresan la entidad lo 
que hace que la unidad de pruebas falle.

Con la expresión regular que mencioné anteriormente se solucionó la 
conversión de algunas entidades haciendo que la unidad de pruebas pase, 
pero me encontré con ' y quiero encontrar alguna función o módulo 
que me permita convertir también este tipo de entidades que, como 
mencionas y yo no sabía, son entidades Xml.

Espero sea claro, gracias y saludos


Chema Cortes escribió:
> El 19/12/06, Oscar de Anda<oscar en jornada.com.mx> escribió:
>> Alguien sabe como puedo convertir las entidades HTML a sus caracteres
>> correspondientes?.
>>
>> Hasta el momento tengo solucionados los casos en que la entidad es
>> numérica, por ejemplo: &#8220;, &#8221;.  utilizando la función unichr.
>>
>> No sé como hacer para convertir las del tipo como &apos;, &amp;.
>>
>> Creo que en Php existía una función para eso, html_entity_decode si no
>> mal recuerdo
>
> En python tienes el módulo 'htmlentitydefs' con tres diccionarios que
> te pueden servir. Según lo que quieras hacer, el parser de html
> también es capaz de entender entidades, pero no precisas mucho de lo
> que pretendes conseguir.
>
> Por poner un ejemplo:
>
> import re
> from htmlentitydefs import name2codepoint
>
> pat=re.compile("&(\w+);")
>
> def repl(m):
>  ent=m.group(1)
>  if name2codepoint.has_key(ent):
>    return unichr(name2codepoint[ent])
>  else:
>    return u'?'  #si falla devuelve un '?'
>
> s_convertida=pat.sub(repl, "entidades &apos; y &amp;")
>
>
> Si te preguntas porqué no aparece el apóstrofe (&apos;) es porque no
> es una entidad html, sólo xml.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




Más información sobre la lista de distribución Python-es