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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top