È possibile analizzare hxt <textarea> con <a> al suo interno?
Domanda
Uso hxt per analizzare un po' di codice HTML.Ha un codice HTML senza escape all'interno <textarea>
.hxt fornisce risultati non validi (si imbatte in un tag con contenuto in questo caso è <a>
).Il test case minimo (per GHCi) lo è
let doc = parseHtml "<textarea>before<a>link</a>after</textarea>"
runX . xshow $ doc //> hasName "textarea"
che dà [<textarea>before</textarea><textarea/>]
di conseguenza.
Sembra che i tag siano senza contenuto (ad es. <tag/>
) non interrompe l'analisi.
Esiste un modo per analizzare tale codice HTML con hxt?
Soluzione
Il problema è che Zuppa bella (che presumo sia dove tuo parseHTML
è da) è esigente riguardo a cose come il fatto che a textarea
non può contenere un a
in HTML valido e proverà a "correggere" eventuali errori di questo tipo rilevati.
Puoi passare a hxt-tagsoup?Accetterà comunque HTML disordinato (elementi non chiusi, ecc.), ma non è così pignolo riguardo all'aderenza allo schema HTML, in particolare ti consentirà di avere un a
in 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"
Questo stampa quanto segue:
["<textarea>before<a>link</a>after</textarea>"]
Penso che sia quello che vuoi.