libxml-parse-html-region(およびその他のXMLパース関数)によって返されるDOMは、各ノードがノード名(タグと呼ばれる)と、任意のキー/値の属性リスト、および子ノードのリストを持つツリー構造となっています。子ノードは、文字列またはDOMオブジェクトのいずれかです。
(body ((width . "101")) (div ((class . "thing")) "Foo" (div nil "Yes")))
この関数は、タイプ tag の DOM ノードを作成します。attributes が指定された場合は、キーと値のペアのリストである必要があります。children が指定された場合は、DOM ノードである必要があります。
この構造を扱うには、以下の関数を使用できます。各関数は、DOMノード、またはノードのリストを引数に取ります。後者の場合、リスト内の最初のノードのみが使用されます。
シンプルなアクセサ:
dom-tag nodeノードのタグ(「ノード名」とも呼ばれます)を返します。
dom-attr node attributeノード内の attribute の値を返します。一般的な使い方は以下の通りです:
(dom-attr img 'href) => "https://fsf.org/logo.png"
dom-children nodeノードのすべての子を返す。
dom-non-text-children nodeノードの文字列以外の子要素をすべて返す。
dom-attributes nodeノードの属性のキー/値ペアのリストを返します。
dom-inner-text nodeノードのすべてのテキスト要素と、そのすべての子ノードのテキスト要素を、再帰的に連結した文字列として返します。
dom-parent dom nodenode の親を dom に返す。
dom-remove dom nodedomからnodeを削除する。
以下は、DOM を変更するための関数です。
dom-set-attribute node attribute valueノードのattributeをvalueに設定する。
dom-remove-attribute node attributenodeからattributeを削除する。
dom-append-child node childnodeの最後の子としてchildを追記する。
dom-add-child-before node child beforebeforeノードの前に、nodeの子リストにchildを追加してください。beforeがnilである場合は、childを最初の子にしてください。
dom-set-attributes node attributesノードのすべての属性を新しいキー/値のリストに置き換える。
以下は、DOM 内の要素を検索するための関数です。いずれも、一致するノードのリストを返します。
dom-by-tag dom tagdom 内のノードのうち、型が tag であるものをすべて返します。典型的な使用例は以下の通りです:
(dom-by-tag dom 'td) => '((td ...) (td ...) (td ...))
dom-by-class dom matchdom 内のノードのうち、正規表現である match に一致するクラス名を持つものをすべて返す。
dom-by-style dom styledom 内のノードのうち、正規表現である match に一致するスタイルを持つものをすべて返す。
dom-by-id dom styledom 内のノードのうち、正規表現である match に一致する ID を持つものをすべて返す。
dom-search dom predicatepredicate が nil 以外の値を返す
dom 内のすべてのノードを返します。predicate
には、テスト対象のノードが引数として渡されます。
dom-strings domdom内のすべての文字列を返す。
ユーティリティ関数:
dom-pp dom &optional remove-emptyポイント位置の dom を整形して出力する。remove-empty の場合は、空白文字のみを含むテキストノードは出力しない。
dom-print dom &optional pretty xmlポイントに dom を出力する。xml が nil でない場合は、XML
として出力し、そうでない場合は HTML として出力する。pretty が nil でない場合は、HTML/XML を論理的にインデントする。