質問

私はいくつかのhtmlを解析するためにhxtを使用します。それは内部のエスケープされていないhtmlを長谷 <textarea>.hxtは無効な結果を与えます(この場合、コンテンツを含むタグにつまずきます <a>).最小テストケース(GHCi用)は次のとおりです。

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

これは与える [<textarea>before</textarea><textarea/>] 結果として。

内容のないタグのように見えます(例: <tag/>)解析を中断しないでください。

Hxtでそのようなhtmlを解析する方法はありますか?

役に立ちましたか?

解決

問題は次のとおりです。 ハンドソムソープ (私が仮定しているのは、あなたの場所です parseHTML からです)という事実のようなものについてうるさいです textarea を含めることはできません a 有効なHTMLでは、そのようなエラーを"修正"しようとします。

に切り替えることはできますか hxt-tagsoup?それはまだ厄介なHTML(閉じられていない要素など)を受け入れます。)、しかし、HTMLスキーマへの準拠についてはそれほどうるさいではありません—具体的には、あなたが持っているようになります a aでは、 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"

これにより、次のように出力されます:

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

私はあなたが望むものだと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top