Es posible analizar por hxt <textarea> con <a> en ella?
Pregunta
Yo uso hxt a analizar algunos de html.Se hase sin escape html dentro <textarea>
.hxt da resultados no válidos (se tropieza con una etiqueta con el contenido que en este caso es <a>
).Mínima de prueba (para el Intérprete) es
let doc = parseHtml "<textarea>before<a>link</a>after</textarea>"
runX . xshow $ doc //> hasName "textarea"
lo que da [<textarea>before</textarea><textarea/>]
como resultado.
Parece etiquetas sin contenido (por ejemplo, <tag/>
) no romper el análisis.
Es allí cualquier manera de analizar tales html con hxt?
Solución
El problema es que HandsomeSoup (que supongo que es donde su parseHTML
es de allí) es exigente con las cosas, como el hecho de que un textarea
no puede contener una a
en HTML válido, y va a tratar de "arreglar" tales errores se ve.
Se puede cambiar a hxt-tagsoup?Se aceptará todavía desordenado HTML (sin cerrar elementos, etc.), pero no es tan exigente respecto a la adhesión al esquema HTML—en concreto que le permita tener un a
en 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"
Esto imprime el siguiente:
["<textarea>before<a>link</a>after</textarea>"]
Que creo que es lo que quieres.