Emacsは、libxml2サポートを内蔵した状態でコンパイル可能です。
この関数は、現在のEmacsセッションでlibxml2の組み込みサポートが利用可能な場合、non-nilを返します。
libxml2 のサポートがある場合、以下の関数を使用して HTML や XML テキストを Lisp のオブジェクトツリーにパースできます。
この関数は、start と end の間のテキストを HTML として解析し、HTML の 構文木 を表すリストを返します。構文エラーに頑健に対処することで、実際の HTML を処理しようと試みます。
start または end が nil の場合、それぞれ point-min と point-max の値がデフォルトとして適用されます。
オプション引数 base-url は、nil
以外の場合、libxml2 ライブラリから報告される警告やエラーに使用されるはずですが、現在の
Emacs ではエラーと警告を無効にした状態でライブラリを呼び出しているため、この引数は使用されません。
オプション引数 discard-comments が nil 以外の場合、最上位のコメントはすべて破棄されます。(この引数は非推奨となっており、今後の Emacs
バージョンで削除される予定です。コメントを削除するには、パース関数を呼び出す前に、データに対して xml-remove-comments ユーティリティ関数を使用してください。)
構文木では、各HTMLノードはリストで表現され、第1要素はノード名を表すシンボル、第2要素はノード属性のアリリスト、残りの要素はサブノードとなります。
以下の例でこれを示します。次のような(不正な形式の)HTMLドキュメントがあるとします。
<html><head></head><body width=101><div class=thing>Foo<div>Yes
libxml-parse-html-region を呼び出すと、この DOM(ドキュメントオブジェクトモデル)が返されます:
(html nil
(head nil)
(body ((width . "101"))
(div ((class . "thing"))
"Foo"
(div nil
"Yes"))))
この関数は、dom でパースされた HTML を現在のバッファに出力します。引数 dom には、libxml-parse-html-region
によって生成されたリストを指定する必要があります。この関数は、例えば The Emacs Web Wowser
Manual の EWW
で使用されています。
この関数は libxml-parse-html-region と同じですが、テキストを HTML
ではなく XML として解析する点が異なります(そのため、構文に対してより厳格です)。