2

libxml2 を使用して Web ページからデータを抽出する小さなプログラムを作成しようとしています。データは HTML ファイル内でローカルであるため、HTML をトラバース可能なメモリ構造に入れるための出発点として、次のコードを使用することにしました。

int main(int argc, char* argv[])
{
    htmlDocPtr dp = htmlReadFile(argv[1], NULL, HTML_PARSE_RECOVER | HTML_PARSE_NONET );

ただし、HTML ファイルをパラメーターとして渡してこれを実行すると、エラーが発生します。

HTML parser error : htmlParseEntityRef: expecting ';'

不満のように見えるのは、次のとおりです。

<a href="do_something.html?a=1&b=2"> some stuff </a>

つまり、属性の内容を無視しhrefたり、パラメータ付きの URL として扱ったりするのではなく、ビット fromを&name;&bのようなエンティティ参照として扱っているようです。セミコロンがないことを訴えます。きっとそうじゃない?これを無視するために別のことをする必要がありますか (いずれにせよ、これらのタグには興味がありません)、それともどういうわけかポイントを逃しただけですか?

4

1 に答える 1

1

無効な URL が含まれているため、入力ファイルは無効です。RFC 3986 - 予約済み文字のポイント 2.2 を参照してください。アンパサンドは、パーセント記号エスケープを使用してエスケープする必要があり、疑問符もエスケープする必要があります。正当な URL は次のようになります。

<a href="do_something.html%3Fa%3D1%26b%3D2"> some stuff </a>

しかし、これは、html を解析しようとするときのトラップの長いリストの 1 つにすぎません。通常のアプローチは、整頓ライブラリを使用することです。この質問を参照してください: Parse html using C . 目標は、実際の解析の前に html のエラーをクリアすることです。

于 2012-11-11T21:41:45.160 に答える