libxml-parse-html-region
(およびその他のXMLパース関数)がリターンするDOMはツリー構造です。このツリー構造ではそれぞれのノードがノード名(タグ(tag)と呼ばれる)をもち、オプションでkey/value値からなる属性(attribute)リスト、その後に子ノード(child
nodes)が続きます。子ノードは文字列かDOMオブジェクトのいずれかです。
(body ((width . "101")) (div ((class . "thing")) "Foo" (div nil "Yes")))
この関数はタイプtagのDOMノードを作成する。もしattributesが与えられたら、それはkey/valueペアのリストであること。もしchildrenが与えられたら、それはDOMノードであること。
この構造を処理するために以下の関数を使用できます。それぞれの関数はDOMノードかノードのリストを受け取ります。後者の場合には、そのリストの最初のノードだけが使用されます。
シンプルなアクセサー
dom-tag node
ノードのタグ (“ノード名”とも呼ばれる)をリターンする。
dom-attr node attribute
ノードの属性の値をリターンする。以下は一般的な使用例:
(dom-attr img 'href) => "https://fsf.org/logo.png"
dom-children node
ノードのすべての子をリターンする。
dom-non-text-children node
ノードのすべての非文字列の子をリターンする。
dom-attributes node
ノードの属性のkey/valueペアのリストをリターンする。
dom-text node
ノードのすべてのテキスト的な要素を連結された文字列としてリターンする。
dom-texts node
ノードのすべてのテキスト的な要素、およびノードのすべての子のテキスト的な要素を、連結された文字列として再帰的にリターンする。この関数はテキスト的な要素の間に挿入するオプションのセパレーターも受け取る。
dom-parent dom node
dom内でのnodeの親をリターンする。
dom-remove dom node
domからnodeを削除する。
以下はDOMを変更するための関数です。
dom-set-attribute node attribute value
ノードのattributeにvalueをセットする。
dom-remove-attribute node attribute
nodeからattributeを削除する。
dom-append-child node child
nodeの最後の子としてchildを追加する。
dom-add-child-before node child before
nodeの子リストのノードbeforeの前にchildを追加する。beforeがnil
なら、childが最初の子になる。
dom-set-attributes node attributes
ノードのすべての属性を新たなkey/valueリストに置き換える。
以下はDOM内の要素を検索する関数です。これらはマッチしたノードのリストをリターンします。
dom-by-tag dom tag
dom内のタイプがtagのすべてのノードをリターンする。典型的な使用例は:
(dom-by-tag dom 'td) => '((td ...) (td ...) (td ...))
dom-by-class dom match
dom内のクラス名が正規表現matchにマッチするすべてのノードをリターンする。
dom-by-style dom style
dom内のスタイルが正規表現matchにマッチするすべてのノードをリターンする。
dom-by-id dom style
dom内のIDが正規表現matchにマッチするすべてのノードをリターンする。
dom-search dom predicate
predicateが非nil
値をリターンしたdom内のすべてのノードをリターンする。predicateはテストされるノードをパラメーターとして呼び出される。
dom-strings dom
dom内のすべての文字列をリターンする。
ユーティリティ関数:
dom-pp dom &optional remove-empty
ポイント位置のdomにたいしてプリティプリント(pp: 優雅なプリント)を行う。remove-emptyなら空白文字だけを含むテキスト的ノードはプリントしない。
dom-print dom &optional pretty xml
ポイント位置のdomをプリントする。xmlが非nil
ならXML、それ以外ならHTMLとしてプリントする。prettyが非nil
なら、HTML/XMLを論理的にプリントする。