HTMLフラグメントを解析する必要があります。つまり、ファイルには<html>、<head>、および<body>要素がなく、それ以外の場合は整形式のXHTML構文があり、UTF8エンコーディングが保証されています。libxmlはこのタスクに理想的であるように見えますが、実装方法がわからない特定の制約があります。
- htmlSAXParseFile()は十分に機能しますが、DOM自体を作成し、プロセスにbody要素とhtml要素を挿入しているようです。一部の要素をスキップして他の要素をその場で変更する必要がある場合があるため、自分でDOMを作成したいと思います。どういうわけかlibxmlにDOMをまったく作成せず、HTMLを解析してハンドラーを呼び出すように指示することは可能ですか?
- libxml HTMLパーサーでそれが不可能な場合は、DOMを作成していないように見えるxmlSAXUserParseFile()を使用することもできます。ただし、ファイルは<p> ... </ p> <p> ... </ p>のような構造であるため、パーサーは「ドキュメントの最後にある余分なコンテンツ」を早すぎて吐き出します。いくつかの解析エラーについて通知を受けながら、それらを抑制する方法はありますか(これらのファイルに他のエラーが発生しないことを誰も保証していないため)?
- libxmlには非常に多くの解析関数があり、そのうちのいくつかはxmlParserOptionをパラメーターとして受け入れます。残念ながら、xmlSAXUserParseFile()はそうではありません。そして、それらはすべて、いくつかの無関係なAPI設計上の理由でDOMを作成しているようです。明らかな候補がありませんか?
ああ、そして私はlibxmlのDOMを使用することに抵抗があるように見えることを告白します。私はRAMに非常に制約があるため、メモリ不足の状態で一部のノードをドロップし、必要に応じてそれらを再読み取りできるようにするには、DOMを完全に制御する必要があります。
前もって感謝します。