Up: Parsing HTML/XML   [Contents][Index]


32.28.1 ドキュメントオブジェクトモデル

libxml-parse-html-region (およびその他のXMLパース関数)がリターンするDOMはツリー構造です。このツリー構造ではそれぞれのノードがノード名(タグ(tag)と呼ばれる)をもち、オプションでkey/value値からなる属性(attribute)リスト、その後に子ノード(child nodes)が続きます。子ノードは文字列かDOMオブジェクトのいずれかです。

(body ((width . "101"))
 (div ((class . "thing"))
  "Foo"
  (div nil
   "Yes")))
Function: dom-node tag &optional attributes &rest children

この関数はタイプtagDOMノードを作成する。もし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

ノードのattributevalueをセットする。

dom-append-child node child

nodeの最後の子としてchildを追加する。

dom-add-child-before node child before

nodeの子リストのノードbeforeの前にchildを追加する。beforenilなら、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なら空白文字だけを含むテキスト的ノードはプリントしない。