Ist es möglich, hxt <textarea> mit <a> darin zu analysieren?
Frage
Ich verwende hxt, um etwas HTML zu analysieren.Es enthält HTML ohne Escapezeichen <textarea>
.hxt liefert ungültige Ergebnisse (es stößt auf ein Tag mit Inhalt, in diesem Fall ist es das). <a>
).Minimaler Testfall (für GHCi) ist
let doc = parseHtml "<textarea>before<a>link</a>after</textarea>"
runX . xshow $ doc //> hasName "textarea"
was gibt [<textarea>before</textarea><textarea/>]
infolge.
Es sieht aus wie Tags ohne Inhalt (z. B. <tag/>
) unterbrechen das Parsen nicht.
Gibt es eine Möglichkeit, solchen HTML-Code mit hxt zu analysieren?
Lösung
Das Problem ist, dass Hübsche Suppe (Ich gehe davon aus, dass es dort ist, wo Sie sind parseHTML
ist aus) ist wählerisch in Dingen wie der Tatsache, dass a textarea
kann kein enthalten a
in gültigem HTML und wird versuchen, alle derartigen Fehler zu „beheben“.
Kannst du wechseln? hxt-tagssuppe?Es akzeptiert immer noch unordentliches HTML (nicht geschlossene Elemente usw.), ist aber bei der Einhaltung des HTML-Schemas nicht so wählerisch – insbesondere ermöglicht es Ihnen ein a
in einem 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"
Dadurch wird Folgendes gedruckt:
["<textarea>before<a>link</a>after</textarea>"]
Was ich denke, ist das, was Sie wollen.