GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Parsing-HTML_002fXML.html ・ emacs-doc.conao3.com

33.30 HTMLとXMLのパース

Emacsは、libxml2サポートを内蔵した状態でコンパイル可能です。

関数: libxml-available-p

この関数は、現在のEmacsセッションでlibxml2の組み込みサポートが利用可能な場合、non-nilを返します。

libxml2 のサポートがある場合、以下の関数を使用して HTML や XML テキストを Lisp のオブジェクトツリーにパースできます。

関数: libxml-parse-html-region &optional start end base-url discard-comments

この関数は、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"))))
関数: shr-insert-document dom

この関数は、dom でパースされた HTML を現在のバッファに出力します。引数 dom には、libxml-parse-html-region によって生成されたリストを指定する必要があります。この関数は、例えば The Emacs Web Wowser Manual の EWW で使用されています。

関数: libxml-parse-xml-region &optional start end base-url discard-comments

この関数は libxml-parse-html-region と同じですが、テキストを HTML ではなく XML として解析する点が異なります(そのため、構文に対してより厳格です)。