Recentemente, tive o problema de decodificar entidades html. Eu tenho as seguintes duas seqüências de caracteres ( observe como dois métodos de codificação são usados, nomeados e numerados ).
The old "how to fold xml" question
Babel doesn't wrap results in verbatim
E eu preciso convertê-los para
The old "how to fold xml" question
Babel doesn't wrap results in verbatim
Pesquisando, encontrei essa pergunta antiga no SO (que é o que estou fazendo no momento), mas me recuso a acreditar que o Emacs não tem uma maneira integrada de fazer isso. Temos vários navegadores da web, pelo menos dois dos quais eu sei que estão embutidos, para não mencionar clientes de email e leitores de feeds.
Não existe uma maneira interna de decodificar entidades html?
Estou procurando uma função que pega uma string do primeiro exemplo e retorna uma string do segundo exemplo.
libxml-parse-html-region
faz isso, é claro, mas pode fazer mais do que você deseja, na medida em que analisa as tags HTML também ... (E nem todos os Emacs também são construídos com suporte a LibXML, eu acho).Respostas:
O Emacs inclui um analisador XML Elisp puro
xml.el
, cujaxml-parse-string
função faz o trabalho, embora pareça um pouco com uma função interna não documentada. Não tenho certeza se existem entidades apenas em HTML que não serão tratadas adequadamente tratando a string como um fragmento XML.Essa função do wrapper simplesmente omitirá as tags à direita da string de entrada, embora você possa torná-la mais rígida:
No Emacs com suporte a LibXML, outra maneira um pouco hackista seria escrever um wrapper
libxml-html-parse-region
. Como o analisador LibXML assume que seu argumento é um documento HTML completo, a função wrapper precisa extrair os dados de caracteres analisados da estrutura do documento retornado, usandopcase
. Tentar decodificar uma string que contenha tags HTML produzirá um erro:Resultados:
Parece um pouco atrasado decodificar um fragmento de documento, analisando-o como um documento completo, apenas para retirar imediatamente as tags circundantes. Por outro lado, o uso do LibXML deve ser rápido e fornecer resultados precisos.
fonte
xml.el
solução mais simples em primeiro lugar.lisp/xml.el
sempre incluiu a funçãoxml-substitute-special
, que executa a mesma entidade decodificação como Jon O. dedecode-entities
. No entanto, não omite as tags finais.web-mode.el
faz isso comweb-mode-dom-entities-replace
.fonte