Hxtで解析することは可能ですか <textarea> と <a> その中に?
質問
私はいくつかの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>"]
私はあなたが望むものだと思います。
所属していません StackOverflow