Question

J'utilise hxt pour analyser du HTML.Il contient du HTML non échappé <textarea>.hxt donne des résultats invalides (il tombe sur une balise avec du contenu dans ce cas c'est <a>).Le cas de test minimal (pour GHCi) est

let doc = parseHtml "<textarea>before<a>link</a>after</textarea>"
runX . xshow $ doc //> hasName "textarea"

qui donne [<textarea>before</textarea><textarea/>] par conséquent.

Cela ressemble à des balises sans contenu (par ex. <tag/>) n'interrompt pas l'analyse.

Existe-t-il un moyen d'analyser un tel code HTML avec hxt ?

Était-ce utile?

La solution

Le problème est que BelleSoupe (ce qui, je suppose, est l'endroit où se trouve votre parseHTML vient de) est pointilleux sur des choses comme le fait qu'un textarea ne peut pas contenir un a en HTML valide, et essaiera de "corriger" toutes les erreurs qu'il voit.

Pouvez-vous passer à hxt-tagsoup?Il acceptera toujours le HTML désordonné (éléments non fermés, etc.), mais n'est pas si pointilleux sur le respect du schéma HTML - en particulier, il vous permettra d'avoir un a dans un textarea:

import Text.XML.HXT.Core
import Text.XML.HXT.TagSoup

let content = "<textarea>before<a>link</a>after</textarea>"
let doc = readString [ withTagSoup ] content
runX . xshow $ doc //> hasName "textarea"

Cela imprime ce qui suit :

["<textarea>before<a>link</a>after</textarea>"]

Je pense que c'est ce que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top