Recientemente me encontré con el problema de decodificar entidades html. Tengo las siguientes dos cadenas (tenga en cuenta cómo se utilizan dos métodos de codificación, nombrados y numerados ).
The old "how to fold xml" question
Babel doesn't wrap results in verbatim
Y necesito convertirlos a
The old "how to fold xml" question
Babel doesn't wrap results in verbatim
Al buscar, encontré esta vieja pregunta sobre SO (que es lo que estoy haciendo por el momento), pero me niego a creer que Emacs no tenga una forma integrada de hacerlo. Tenemos varios navegadores web, al menos dos de los cuales sé que están integrados, sin mencionar los clientes de correo y los lectores de feeds.
¿No hay una forma integrada de decodificar entidades html?
Estoy buscando una función que tome una cadena del primer ejemplo y devuelva una cadena del segundo ejemplo.
libxml-parse-html-region
hace esto, por supuesto, pero puede hacer más de lo que desea, ya que analiza las etiquetas HTML también ... (Y supongo que no todos los Emacs están construidos con soporte LibXML).Respuestas:
Emacs incluye un analizador XML puro Elisp
xml.el
, cuyaxml-parse-string
función hace el trabajo, aunque parece un poco como una función interna no documentada. No estoy seguro de si hay entidades de solo HTML que no se manejarán correctamente al tratar la cadena como un fragmento XML.Esta función de contenedor simplemente omitirá las etiquetas finales de la cadena de entrada, aunque podría hacerlo más estricto:
En Emacs con soporte para LibXML, otra forma un poco hackeada sería escribir un contenedor
libxml-html-parse-region
. Dado que el analizador LibXML supone que su argumento es un documento HTML completo, la función de contenedor debe extraer los datos de caracteres analizados de la estructura del documento devuelto, utilizandopcase
. Intentar decodificar una cadena que contenga etiquetas HTML producirá un error:Resultados:
Parece un poco hacia atrás decodificar un fragmento de documento analizándolo como un documento completo, solo para quitar inmediatamente las etiquetas circundantes. Por otro lado, usar LibXML debe ser rápido y dar resultados precisos.
fuente
xml.el
primero la solución más simple .lisp/xml.el
siempre ha incluido la funciónxml-substitute-special
, que realiza la misma decodificación de entidades que Jon O.'sdecode-entities
. Sin embargo, no omite las etiquetas finales.web-mode.el
hace esto conweb-mode-dom-entities-replace
.fuente